<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>およそMECEでないアカシックレコードの200那由多飛んで3万分の1</title>
  <id>https://blog.eniehack.net/</id>
  <author>
    <name>Nakaya</name>
    <uri>https://blog.eniehack.net/</uri>
  </author>
  <generator>Hugo gohugo.io</generator>
  <rights>2020 eniehack.
Assets and articles not otherwise specified are licensed under &lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;CC BY 4.0&lt;/a&gt;.
Source code is licensed under by &lt;a href=&#34;https://apache.org/licenses/LICENSE-2.0.txt&#34;&gt;Apache-2.0&lt;/a&gt;.
</rights>
  <updated>2024-03-16T09:04:42Z</updated>
  <link rel="self" type="application/atom+xml" href="https://blog.eniehack.net/tags/software/atom.xml" hreflang="ja"/>
  <link rel="alternate" type="text/html" href="https://blog.eniehack.net/tags/software/" hreflang="ja"/>
  <entry>
    <title>yayからaurutilsに移行してみる</title>
    <author>
      <name></name>
      <uri></uri>
    </author>
    <id>https://blog.eniehack.net/articles/2021/02/21/aurutils-introduction/</id>
    <updated>2021-02-21T13:41:40Z</updated>
    <published>2021-02-21T13:40:23Z</published>
    <content type="html">&lt;h2 id=&#34;motivation&#34;&gt;動機&lt;/h2&gt;
&lt;p&gt;AURヘルパーは今までyayを使っていて、何ら不自由はなかった。しかし、書籍『UNIXという考え方』やPOSIX原理主義に感銘を受けたというのが大きい。特に前者の書籍にあった「実行速度より可搬性」というのはかなり同意できた。&lt;/p&gt;
&lt;p&gt;shellscriptの良さはPOSIX準拠である環境であれば、確実に使える点だ。これはPerl、PythonやRubyにはない有利な点である。また、shellscriptは遅いと一般的には考えられているが、パイプなどを意識すれば、shellsciptは高速化可能であることも&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;、shellscriptのよい点だ。&lt;/p&gt;
&lt;p&gt;そのような思想に影響を受けたなか、bash製のaurutilsというAURヘルパーを発見し、私は使っていたyayからaurutilsへ移行してみることにした。&lt;/p&gt;
&lt;h2 id=&#34;target-readers&#34;&gt;対象読者&lt;/h2&gt;
&lt;p&gt;ArchLinux系のディストリビューションを使うユーザをこの記事は対象とする。ただし、その中でもTerminalに触れることに抵抗がなく、AURについて知っていることを前提として話を進めることとする。&lt;/p&gt;
&lt;h2 id=&#34;what-is-aurutils&#34;&gt;aurutilsとは&lt;/h2&gt;
&lt;p&gt;aurutilsとはbash製のAURヘルパである。&lt;/p&gt;
&lt;p&gt;AURヘルパにもgolang製のyay、nim製のpakkuなど、様々なものがある。しかし、それらとは異なり、このaurutilsはpacmanにあるcustom local repositoryという機能&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;を用いて、AURにあるパッケージをインストールする。&lt;/p&gt;
&lt;p&gt;具体的に、custom local repositoryを使わないyayと、使うaurutilsではどのように違うのか、比較してみる。
yayなどでは、以下のような動作をする。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AURからパッケージを取得&lt;/li&gt;
&lt;li&gt;依存関係の解決&lt;/li&gt;
&lt;li&gt;パッケージのインストールを行う。（ &lt;code&gt;makepkg -si&lt;/code&gt; ）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;しかし、aurutilsでは&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AURからパッケージを取得&lt;/li&gt;
&lt;li&gt;依存関係の解決&lt;/li&gt;
&lt;li&gt;ビルドでちらかった環境の整理&lt;/li&gt;
&lt;li&gt;所定の位置へアーカイブを配置する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;だけだ。インストールはaurutilsが行なわない。これは、公式リポジトリのパッケージのように、pacmanが行う。&lt;/p&gt;
&lt;h3 id=&#34;merit&#34;&gt;特徴&lt;/h3&gt;
&lt;p&gt;yay-binを使えば話は別だが、yayはgolangのコンパイラを導入しなければならない。しかし、aurutilsは幾つかのbashスクリプトと、幾つかのmanドキュメントで構成されており、パッケージサイズが小さい。実際に、パッケージアーカイブ( &lt;code&gt;pkg.tar.zst&lt;/code&gt; ）の状態で、yay-binは約8MB、aurutilsは約100KBである。
yayのほうが、依存するパッケージは少ないかもしれないが、aurutilsでは依存するパッケージの1つ1つが、小さい。&lt;/p&gt;
&lt;p&gt;加えて、aurutilsに関してはpaccacheも設定なしにcustomリポジトリに適用できた。しかし、 &lt;code&gt;makepkg.conf&lt;/code&gt; に &lt;code&gt;PKGDEST=/path/to/yay/cache&lt;/code&gt; のように設定し、 &lt;code&gt;paccache -c /path/to/yay/cache&lt;/code&gt; のように実行すれば、yayでも実行できる。しかし設定せずとも、paccacheが使える点では、yayより有利かもしれない。&lt;/p&gt;
&lt;p&gt;ちなみに、paccacheは&lt;a href=&#34;https://archlinux.org/packages/community/x86%5F64/pacman-contrib/&#34;&gt;pacman-contrib&lt;/a&gt;パッケージにあるコマンドだ。localにあるのパッケージアーカイブを、デフォルトで最新の3つのみを残して、それ以外を削除することができる。&lt;/p&gt;
&lt;p&gt;ただ、aurutilsは &lt;code&gt;yay -Ss&lt;/code&gt; のような、AURと公式リポジトリを横断的に探索する機能がない、という不便な部分もある。&lt;/p&gt;
&lt;p&gt;これらの特徴を考えると、サーバや、HDDの小さいPCなど、ディスクをシビアに管理しなければならないような環境に向いているのかもしれない。&lt;/p&gt;
&lt;h3 id=&#34;aurutils-usage&#34;&gt;使い方&lt;/h3&gt;
&lt;p&gt;aurutilsはaurコマンドと、いくつかのサブコマンドで構成されている。サブコマンドの詳しい解説は &lt;code&gt;man 1 aur-sync&lt;/code&gt; のように、manコマンドからそれぞれ読むことができる。&lt;/p&gt;
&lt;h4 id=&#34;install&#34;&gt;install&lt;/h4&gt;
&lt;p&gt;AURからパッケージをインストールするときは、まず、 &lt;code&gt;aur sync $pkgname&lt;/code&gt; のようにパッケージをビルドし、配置する。次に、データベースを更新して（ &lt;code&gt;pacman -Syy&lt;/code&gt; ）、インストール（ &lt;code&gt;pacman -S $pkgname&lt;/code&gt; ）する。&lt;/p&gt;
&lt;h4 id=&#34;update&#34;&gt;update&lt;/h4&gt;
&lt;p&gt;aurutilsを用いてAURから取得したパッケージの更新は、 &lt;code&gt;aur sync -u&lt;/code&gt; を実行する。このコマンドによって、まず、パッケージの更新確認する。その結果から、更新がある場合はビルドしてcustomリポジトリへ配置する。&lt;/p&gt;
&lt;h4 id=&#34;search&#34;&gt;search&lt;/h4&gt;
&lt;p&gt;パッケージの検索は &lt;code&gt;aur search $pkgname&lt;/code&gt; のようにコマンドを実行する。&lt;/p&gt;
&lt;h4 id=&#34;その他&#34;&gt;その他&lt;/h4&gt;
&lt;p&gt;その他にもaurutilsは &lt;code&gt;aur&lt;/code&gt; コマンドのサブコマンドとして様々な機能を提供している。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;aur build&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;パッケージをビルドする&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;aur fetch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;パッケージを取得してくる&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;aur chroot
&lt;code&gt;systemd-nspawn&lt;/code&gt; を用いてパッケージをビルドする&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;aur query&lt;/p&gt;
&lt;p&gt;aurwebへGETリクエストを送る&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;aur pkglist
AURにある全てのパッケージ名を取得する&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;install&#34;&gt;導入&lt;/h2&gt;
&lt;p&gt;ここからは、yayからaurutilsへ実際に移行してみることにする。&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;を参考にした。また、検証はしていないものの、yay以外の既存のAURヘルパーに関しても、パッケージアーカイブを移動し、 &lt;code&gt;repo-add&lt;/code&gt; コマンドでパッケージを登録すればよいと思われる。さらに、AURヘルパーを初めて導入する場合は、&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;とここを参考にすれば導入できるはずだ。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pacman -Qqm &amp;gt; ~/aurpkglist&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;パッケージアーカイブを移動する&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gitlab.com/-/snippets/2076763&#34;&gt;yayからlocal repoへアーカイブ(pkg.tar.(xz|zst))を移動する自作scriptを書いた&lt;/a&gt;ので参考にどうぞ。&lt;/p&gt;
&lt;p&gt;ちなみに、私は &lt;code&gt;/etc/makepkg.conf&lt;/code&gt; の &lt;code&gt;PKGEXT&lt;/code&gt; を &lt;code&gt;&amp;quot;.pkg.tar.zst&amp;quot;&lt;/code&gt; にしている&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;。なぜなら、ZStandardは展開と圧縮がgzipより高速で、かつpacmanがデフォルトで用いている圧縮フォーマットだからだ。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pacman.confの編集&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;作成するcustomリポジトリをpacmanへ認識させる。
&lt;code&gt;/etc/pacman.d/custom/&lt;/code&gt; へ 以下の内容を書きこみ、&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-nil&#34; data-lang=&#34;nil&#34;&gt;[options]
CacheDir = /var/cache/pacman/pkg
CacheDir = /var/cache/pacman/custom
CleanMethod = KeepCurrent

[custom]
SigLevel = Optional TrustAll
Server = file:///var/cache/pacman/custom
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;/etc/pacman.conf&lt;/code&gt; の最後に &lt;code&gt;Include = /etc/pacman.d/custom/&lt;/code&gt; を追記する。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sudo install -d /var/cache/pacman/custom -o $USER&lt;/code&gt; でディレクトリを作成する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cd /var/cache/pacman/custom/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;repo-add custom.db.tar&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;repo-add&lt;/code&gt; とはpacmanが提供する個人的なリポジトリを管理するコマンドだ。このコマンドでは、ワイルドカードでパッケージアーカイブを指定できる。ここではcustomリポジトリのデータベースを作成している。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;repo-add -n custom.db.tar *.pkg.tar.xz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ここではcustomリポジトリのデータベースにyayが作成したパッケージアーカイブを登録する。この作業は長いので、ここでティーブレイクをしてもいいだろう。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最後に &lt;code&gt;pacman -Syu&lt;/code&gt; をすれば完了だ。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;最後に&lt;/h2&gt;
&lt;p&gt;custom local repositoryを始めて知った。これを応用して、gemやpipのパッケージを管理するのはよさそうだ、と思った。&lt;/p&gt;
&lt;p&gt;最後に。添削に協力してくださった、skiaさん、trash_canさんありがとうございました。この場で感謝いたします。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;公式GitHubリポジトリ: &lt;a href=&#34;https://github.com/AladW/aurutils&#34;&gt;AladW / aurutils - GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;松浦 智之、大野 浩之、當仲 寛哲『ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング』&lt;a href=&#34;https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html&#34;&gt;https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html&lt;/a&gt;より。2021/02/20 閲覧。 &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.org/index.php/Pacman/Tips%5Fand%5Ftricks#Custom%5Flocal%5Frepository&#34;&gt;Pacman/Tips and tricks#Custom local repository - Archwiki&lt;/a&gt; &lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/geosharma/afe1ea9ebe58cb67aaaba62a0d47bc7a&#34;&gt;Arch Linux: aurutils installation and configuration - GitHub Gist&lt;/a&gt; &lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;詳細は &lt;code&gt;man 5 makepkg.conf&lt;/code&gt; もしくは &lt;a href=&#34;https://man.archlinux.org/man/makepkg.conf.5.en&#34;&gt;https://man.archlinux.org/man/makepkg.conf.5.en&lt;/a&gt;を参照のこと &lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content>
  </entry>
  <entry>
    <title>W32TeX向けアーカイブマネージャを作った</title>
    <author>
      <name>Nakaya</name>
      <uri>https://eniehack.net</uri>
    </author>
    <id>https://blog.eniehack.net/articles/2019/08/18/make-wtmgr/</id>
    <updated>2021-01-30T17:30:31Z</updated>
    <published>2019-08-17T15:28:22Z</published>
    <content type="html">&lt;div id=&#34;preamble&#34;&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;こんにちは。最近部誌でTeXを使っているのでTeXにお熱のNakayaです。ブログ更新が2週間空きましたが元気に生活しています。&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;WindowsでTeXLiveを使うと毎年更新しないといけないみたいだし、tlmgrが重いしで、私はW32TeXを使っています。しかし、パッケージの管理が大変なので先日&lt;a href=&#34;https://github.com/eniehack/W32TeX-Package-Manager&#34;&gt;W32TeX向けのアーカイブマネージャ&lt;/a&gt;を開発しました。その経緯と思想、内部構造、今後などを語っていきたいと思います。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_経緯&#34;&gt;経緯&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;先日ConTeXtを試してみるかと思い立ってConTeXtのアーカイブをダウンロードし、
&lt;code&gt;texinstwin&lt;/code&gt; からの &lt;code&gt;installmk4&lt;/code&gt; と、&lt;a href=&#34;https://texwiki.texjp.org/?ConTeXt&#34;&gt;TeXjpWiki&lt;/a&gt;通りにコマンドを実行してみると、どうもLuaLaTeXのバージョンが古いみたいでインストールに失敗しました。&lt;br/&gt;
その後W32TeX版LuaLaTeXの最新版を落として無事にConTeXtはインストールできたのですが、
W32TeX公式のCLIインストーラ版にはパッケージマネージャが付属していないのでこうなったのかなあ、と思ったわけです。

&lt;del&gt;ちゃんと更新くらい確認しろ&lt;/del&gt;

W32TeXには他にも初心者向GUIインストーラもあるのですがどうも私の環境では不安定なようで、CLIインストーラを導入して今に至っていて不便なあとずっと思ってました。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_思想&#34;&gt;思想&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;先日のConTeXtの件で本格的にパッケージマネージャを作るぞ、となりましてあれこれ考えて以下のように思想が固まりました。&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Arch Linux&lt;/code&gt; のパッケージマネージャ、 &lt;code&gt;pacman&lt;/code&gt; の良さを取り入れたい&lt;br/&gt;
&lt;code&gt;apt install&lt;/code&gt; なんて長い文字列打ちたくないですよね。でもPacmanなら &lt;code&gt;pacman -S&lt;/code&gt; でできて楽ですね。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TeXの面倒な部分をなくしたい&lt;br/&gt;
そういえばマクロパッケージとかインストールするのも面倒だったなと思って、マクロの管理もできるといいなと思いました。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_書いてて思ったことなど&#34;&gt;書いてて思ったことなど&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GolangのFTP系ライブラリが弱い&lt;br/&gt;
後述するのですが、ファイルリストを詳細取得するコマンド(&lt;code&gt;MLSD&lt;/code&gt;)に対応してなかったり、コマンド直打ちできなかったりいろいろでした。勉強がてらGolangでFTP系ライブラリ書くのはアリだなと思ったりしました。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;interface{}&lt;/code&gt; 、お前……&lt;br/&gt;
Golangの空interfaceはどんな型でも取ることができます。これがGolangのいい点であり悪い部分でもあるんですよね……。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PythonもGolangも久し振りに書いた&lt;br/&gt;
Pythonはもうめっきり(9ヶ月～半年)書いてないので覚えているわけもなく……。Golangも数ヶ月前まで書いてたのにエラー吐かれまくってました。GolangはTILにまとめたはずなのにTILはまともに使えない代物だったし……。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FTPってこんな感じなのか……&lt;br/&gt;
FTPに触れるのが始めてだったのでとても勉強になりました。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Python便利だな……&lt;br/&gt;
ほとんど標準ライブラリで書けてしまいました。すごい……。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_内部では何が起こっているのか&#34;&gt;内部では何が起こっているのか&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;2019/08/18時点では内部構造は以下のようになってます。&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;olist arabic&#34;&gt;
&lt;ol class=&#34;arabic&#34;&gt;
&lt;li&gt;
&lt;p&gt;CLIで欲しいパッケージを取得する&lt;br/&gt;
&lt;code&gt;wtmgr -S luatexja&lt;/code&gt; だったら &lt;code&gt;luatexja&lt;/code&gt; が欲しいんだなとなるわけです。&lt;br/&gt;
また、コマンドライン引数のパースにはPython標準ライブラリの &lt;code&gt;Argparse&lt;/code&gt; を使ってます&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;FTPでミラーにアクセス&lt;br/&gt;
W32TeXのアーカイブをミラーしてくださっているサーバはいくつかあるのですが、選ぶアルゴリズムを考えるのも面倒だったのでringから取ってくるようにしてます。&lt;br/&gt;
これまたPython標準ライブラリである、 &lt;code&gt;ftplib&lt;/code&gt; を使ってFTPの操作をしてます。&lt;/p&gt;
&lt;div class=&#34;olist loweralpha&#34;&gt;
&lt;ol class=&#34;loweralpha&#34; type=&#34;a&#34;&gt;
&lt;li&gt;
&lt;p&gt;目的のディレクトリまで &lt;code&gt;CWD&lt;/code&gt;&lt;br/&gt;
UNIXでいうとこで &lt;code&gt;cd&lt;/code&gt; ですね、FTPでは &lt;code&gt;CWD&lt;/code&gt; (Change Working Directory)とかいうっぽいです&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;MLSD&lt;/code&gt; してファイルリストを取得&lt;br/&gt;
&lt;code&gt;LIST&lt;/code&gt; だかというFTPのコマンドがあるのですがこれだと単純にファイルリストを返すだけなのでファイルの変更日時とかが分からないので &lt;code&gt;MLSD&lt;/code&gt; を使うことにしました&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;欲しいパッケージとファイルリストを照合する&lt;br/&gt;
forとif文をブン回すやつです&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;目的のファイルを &lt;code&gt;RETR&lt;/code&gt; する
Pythonではバイナリを &lt;code&gt;open()&lt;/code&gt; でhogehogeするさいは modeの最後に &lt;code&gt;rb&lt;/code&gt; のように &lt;code&gt;b&lt;/code&gt; をつけるっぽいですね。勉強になります。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_今後&#34;&gt;今後&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;現時点では最低限のことしてできないのでまだまだ拡張していきたいところでして、今後計画しているのは機能の拡張と言語を変えてのリライトの2つです。&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_機能の拡張&#34;&gt;機能の拡張&lt;/h3&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;とりあえずアーカイブのダウンロードが簡易的にはできるようになったので、それをアップデートできる機能が欲しいと思ってます。&lt;br/&gt;
また、そういえばLaTeXのパッケージってインストールするの面倒だったよなと思ったので、ここからLaTeXのパッケージを管理できるようになりたいと思ってます。

&lt;del&gt;環境変数 TEXMF って探すの面倒じゃないですか？毎回ggってしまいます&lt;/del&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_開発言語の変更&#34;&gt;開発言語の変更&lt;/h3&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;PythonはArgperserやftplibが標準ライブラリとなっていて魅力的な言語ではありますが、
Windowsで使うにはPythonインストールする手間などを考えると少々ハードルが高くなるかと思ってます。

&lt;del&gt;そもそもTeXの導入はハードルが高いのでは？&lt;/del&gt;&lt;br/&gt;

また、私自身さまざまな言語に触れてみたいと思っていることもあり、他言語で開発しようかなと思ってます。&lt;br/&gt;
移行先の言語候補としては、なんだかんだ単一バイナリが吐けて便利なGolang、
勉強がてらRust、F#のあたりかななんて。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_おわりに&#34;&gt;おわりに&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;TeXの何がダメってエラーメッセージの適当さですよね。
まあ、そこを気にしたらTeX使えませんし膨大なマクロが使えるのがいいんですけど……。
しかも最近は代替としてSATySFiやRe:view、Asciidoctorもあることですし……。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content>
  </entry>
</feed>
