およそMECEでないアカシックレコードの200那由多飛んで3万分の1
https://blog.eniehack.net/
Nakaya
https://blog.eniehack.net/
Hugo gohugo.io
2020 eniehack.
Assets and articles not otherwise specified are licensed under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
Source code is licensed under by <a href="https://apache.org/licenses/LICENSE-2.0.txt">Apache-2.0</a>.
2024-03-16T09:04:42Z
BlogをNanocで改装した
Nakaya
https://eniehack.net
https://blog.eniehack.net/articles/2020/05/21/rebuild-blog-by-nanoc/
2021-01-30T15:36:05Z
2020-05-21T14:32:31Z
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>おひさしぶりです。Nakayaです。Blogを引っ越してもう1年が経とうとしていますね……。
後で書くのですが、Hugoに納得できなくなって、GatsbyJSで改装して、またNanocで改装してと転々していたりでBlogの構築自体が面倒になって放置してしまいました。
加えて、TwitterやPleroma、Misskeyなので短文を書くことに慣れ、長文を書くことに面倒臭さを感じていたのもあります。
少なくともBlogからエタっていた間に世間は随分変容してしまったようで、私自身も前からずっと引きこもりみたいな生活をしていたのに、さらに家に出なくなってしまいました。
今回はブログをNanocで改装したのでそれに至るまでの話をしようと思います。少しばかりお付き合いください。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="replace-gatsbyjs-once">GatsbyJSへ一旦の移行</h2>
<div class="sectionbody">
<div class="paragraph">
<p>去年の8、9月にHugoへの不満が高まり、HugoからGatsbyJSに移行しようと決断しました。GatsbyJSを選んだのには、</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Asciidocが使える</p>
</li>
<li>
<p>jsxでテンプレートが自由自在に組める</p>
</li>
<li>
<p>GraphQLから幅広いファイルの情報が選られる</p>
</li>
<li>
<p>日本語文献が多い</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>が大きかったです。結構すんなり組めはしたのですが、インラインCSSがバリバリ施されたStarterを見て、外装を替えようという気持ちが薄れてしまいました。
また、小さいパッケージが多く依存関係が毛糸の球も顔負けのぐちゃぐちゃさで、1つのパッケージにセキュリティ上の脆弱性が見つかるとドミノ倒しのようにその影響を受け、パッケージを更新しなければならないという、
npmの文化が面倒に感じてしまったこともあります。
ところでDeno v1.0.0リリースされましたね。v0.40.0くらいと最近の頃からではありますが、ちょっと追っ掛けてたのでWebエンジニア界隈に一石を投じられていることに感動しました。
この勢いでnpmを滅ぼしてくれ……。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="do-you-know-good-static-site-generator">他にAsciidocが使える静的サイトジェネレータはないか?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>他にAsciidocが使える静的サイトジェネレータはないか?と思って<a href="https://staticgen.com/">StaticGen</a>を漁っていると、
BlogからLPまでなんでも組めちゃうかなり自由度が高いRuby製静的サイトジェネレータだそうで。これしかないと思いNanocで組んでみようと決断しました。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="difficult-part">難しかった部分</h2>
<div class="sectionbody">
<div class="paragraph">
<p>一番はNanocに関する文書、ブログ記事が少ないことでした。今Nanocはバージョンが4なのですが、以前のバージョン3に関する5、6年前の記事が出てきて
日本語文献はそのバージョンのものが多く、ほとんどの情報が今はもう通用しない情報でした。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="what-i-learned">学べた部分</h2>
<div class="sectionbody">
<div class="paragraph">
<p>今回、CSSフレームワークには<a href="milligram.io/">Milligram</a>を採用しました。これはBulmaと比べるとかなり軽量なフレームワークでTypographyや引用、containerくらいしか実装していません。
Bulmaばかり使っていたものの、HTMLの構造が複雑化するBulmaが嫌になり、対極的なMilligramを採用することにしました。
MIlligramのそのシンプルさからレスポンシブ対応を自分で実装することになりましたがこれがかえっていい勉強になりました。
レスポンシブ対応にはCSS メディアクエリを用いるらしいとのことですが初耳でした。
まだうまく行ってない部分もあるので不具合もあるかとは思いますが、スマホ、タブレット、PCでちょっとフォントサイズが違っていると思います。
またSEO対策でbreadcrumbなどを<a href="https://schema.org">Schema.org</a>とにらめっこしながら書いてみました。ちょっとはGoogleで上位になると思います。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="still-have-to-do">まだやり残していること</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Webmentionについては近々別の記事で語りますが、記事の終わりのあたりにWebmentionによって得られたリアクションをDISQUSのiframeみたくくっつけたいです。これは別リポジトリでElmによって書かれるかもしれません。
レスポンシブ対応もまだ中途半端です。breadcrumbが環境によっては途中で改行されていたりしていると思います。これを改行させるのではなく横スワイプにしたかったり。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">さいごに</h2>
<div class="sectionbody">
<div class="paragraph">
<p>実はこのブログのデザインはMediumを意識しています。どこかで「サイドバーはないほうがいい」と聞いていたのとMediumのデザインが好きなので。
素人なので8割ショボくなったMediumもどき以下になりましたが……。
この記事は原稿をWorkflowyで書いているのですがアウトライナーっていいですね。短時間で原稿を書いたわりにはそこそこの量を書けました。Workflowyまた使おうと思います。</p>
</div>
</div>
</div>
W32TeX向けアーカイブマネージャを作った
Nakaya
https://eniehack.net
https://blog.eniehack.net/articles/2019/08/18/make-wtmgr/
2021-01-30T17:30:31Z
2019-08-17T15:28:22Z
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>こんにちは。最近部誌でTeXを使っているのでTeXにお熱のNakayaです。ブログ更新が2週間空きましたが元気に生活しています。</p>
</div>
<div class="paragraph">
<p>WindowsでTeXLiveを使うと毎年更新しないといけないみたいだし、tlmgrが重いしで、私はW32TeXを使っています。しかし、パッケージの管理が大変なので先日<a href="https://github.com/eniehack/W32TeX-Package-Manager">W32TeX向けのアーカイブマネージャ</a>を開発しました。その経緯と思想、内部構造、今後などを語っていきたいと思います。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_経緯">経緯</h2>
<div class="sectionbody">
<div class="paragraph">
<p>先日ConTeXtを試してみるかと思い立ってConTeXtのアーカイブをダウンロードし、
<code>texinstwin</code> からの <code>installmk4</code> と、<a href="https://texwiki.texjp.org/?ConTeXt">TeXjpWiki</a>通りにコマンドを実行してみると、どうもLuaLaTeXのバージョンが古いみたいでインストールに失敗しました。<br/>
その後W32TeX版LuaLaTeXの最新版を落として無事にConTeXtはインストールできたのですが、
W32TeX公式のCLIインストーラ版にはパッケージマネージャが付属していないのでこうなったのかなあ、と思ったわけです。
<del>ちゃんと更新くらい確認しろ</del>
W32TeXには他にも初心者向GUIインストーラもあるのですがどうも私の環境では不安定なようで、CLIインストーラを導入して今に至っていて不便なあとずっと思ってました。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_思想">思想</h2>
<div class="sectionbody">
<div class="paragraph">
<p>先日のConTeXtの件で本格的にパッケージマネージャを作るぞ、となりましてあれこれ考えて以下のように思想が固まりました。</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>Arch Linux</code> のパッケージマネージャ、 <code>pacman</code> の良さを取り入れたい<br/>
<code>apt install</code> なんて長い文字列打ちたくないですよね。でもPacmanなら <code>pacman -S</code> でできて楽ですね。</p>
</li>
<li>
<p>TeXの面倒な部分をなくしたい<br/>
そういえばマクロパッケージとかインストールするのも面倒だったなと思って、マクロの管理もできるといいなと思いました。</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_書いてて思ったことなど">書いてて思ったことなど</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>GolangのFTP系ライブラリが弱い<br/>
後述するのですが、ファイルリストを詳細取得するコマンド(<code>MLSD</code>)に対応してなかったり、コマンド直打ちできなかったりいろいろでした。勉強がてらGolangでFTP系ライブラリ書くのはアリだなと思ったりしました。</p>
</li>
<li>
<p><code>interface{}</code> 、お前……<br/>
Golangの空interfaceはどんな型でも取ることができます。これがGolangのいい点であり悪い部分でもあるんですよね……。</p>
</li>
<li>
<p>PythonもGolangも久し振りに書いた<br/>
Pythonはもうめっきり(9ヶ月~半年)書いてないので覚えているわけもなく……。Golangも数ヶ月前まで書いてたのにエラー吐かれまくってました。GolangはTILにまとめたはずなのにTILはまともに使えない代物だったし……。</p>
</li>
<li>
<p>FTPってこんな感じなのか……<br/>
FTPに触れるのが始めてだったのでとても勉強になりました。</p>
</li>
<li>
<p>Python便利だな……<br/>
ほとんど標準ライブラリで書けてしまいました。すごい……。</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_内部では何が起こっているのか">内部では何が起こっているのか</h2>
<div class="sectionbody">
<div class="paragraph">
<p>2019/08/18時点では内部構造は以下のようになってます。</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>CLIで欲しいパッケージを取得する<br/>
<code>wtmgr -S luatexja</code> だったら <code>luatexja</code> が欲しいんだなとなるわけです。<br/>
また、コマンドライン引数のパースにはPython標準ライブラリの <code>Argparse</code> を使ってます</p>
</li>
<li>
<p>FTPでミラーにアクセス<br/>
W32TeXのアーカイブをミラーしてくださっているサーバはいくつかあるのですが、選ぶアルゴリズムを考えるのも面倒だったのでringから取ってくるようにしてます。<br/>
これまたPython標準ライブラリである、 <code>ftplib</code> を使ってFTPの操作をしてます。</p>
<div class="olist loweralpha">
<ol class="loweralpha" type="a">
<li>
<p>目的のディレクトリまで <code>CWD</code><br/>
UNIXでいうとこで <code>cd</code> ですね、FTPでは <code>CWD</code> (Change Working Directory)とかいうっぽいです</p>
</li>
<li>
<p><code>MLSD</code> してファイルリストを取得<br/>
<code>LIST</code> だかというFTPのコマンドがあるのですがこれだと単純にファイルリストを返すだけなのでファイルの変更日時とかが分からないので <code>MLSD</code> を使うことにしました</p>
</li>
<li>
<p>欲しいパッケージとファイルリストを照合する<br/>
forとif文をブン回すやつです</p>
</li>
<li>
<p>目的のファイルを <code>RETR</code> する
Pythonではバイナリを <code>open()</code> でhogehogeするさいは modeの最後に <code>rb</code> のように <code>b</code> をつけるっぽいですね。勉強になります。</p>
</li>
</ol>
</div>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_今後">今後</h2>
<div class="sectionbody">
<div class="paragraph">
<p>現時点では最低限のことしてできないのでまだまだ拡張していきたいところでして、今後計画しているのは機能の拡張と言語を変えてのリライトの2つです。</p>
</div>
<div class="sect2">
<h3 id="_機能の拡張">機能の拡張</h3>
<div class="paragraph">
<p>とりあえずアーカイブのダウンロードが簡易的にはできるようになったので、それをアップデートできる機能が欲しいと思ってます。<br/>
また、そういえばLaTeXのパッケージってインストールするの面倒だったよなと思ったので、ここからLaTeXのパッケージを管理できるようになりたいと思ってます。
<del>環境変数 TEXMF って探すの面倒じゃないですか?毎回ggってしまいます</del>
</p>
</div>
</div>
<div class="sect2">
<h3 id="_開発言語の変更">開発言語の変更</h3>
<div class="paragraph">
<p>PythonはArgperserやftplibが標準ライブラリとなっていて魅力的な言語ではありますが、
Windowsで使うにはPythonインストールする手間などを考えると少々ハードルが高くなるかと思ってます。
<del>そもそもTeXの導入はハードルが高いのでは?</del><br/>
また、私自身さまざまな言語に触れてみたいと思っていることもあり、他言語で開発しようかなと思ってます。<br/>
移行先の言語候補としては、なんだかんだ単一バイナリが吐けて便利なGolang、
勉強がてらRust、F#のあたりかななんて。</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_おわりに">おわりに</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TeXの何がダメってエラーメッセージの適当さですよね。
まあ、そこを気にしたらTeX使えませんし膨大なマクロが使えるのがいいんですけど……。
しかも最近は代替としてSATySFiやRe:view、Asciidoctorもあることですし……。</p>
</div>
</div>
</div>