概念(@composershandle)です。
Node.jsを最近使うようになってきたので躓きポイントをブログに書いておきたい気持ちが生えてきた
— 概念 (@composershandle) 2023年2月14日
というわけで書きます。
恥ずかしながら。
躓きポイント
躓きポイント①「Node.jsでは何ができるの?」はよくない質問
Node.js® は、Chrome の V8 JavaScript エンジン で動作する JavaScript 環境です。
Node.js公式のトップページを開くとこんな文面が出てくる。
…うん?ああ、JavaScriptが動くのね。それで?
そこで、上のメニューから「Node.jsとは」というページを開く。ここにより詳しく書いてあるに違いない。
Node.js はスケーラブルなネットワークアプリケーションを構築するために設計された非同期型のイベント駆動の JavaScript 環境です。
…つまり何者なのだお前は!
ここでなかなか躓いてしまった。
考えてみれば、ここに具体的な嬉しさが書いてあるはずがない。だってこれは実行環境なのだから。例えば「Windowsではexeファイルが動かせますよ」と言う時に具体的なプログラムの内容なんて関係ない。
『Node.jsで具体的には何ができるの?』ということはNode.js上で動かすそれぞれのプログラムの領分なのだ。
あえて言うなら、「Javascriptができることならば、どんなくだらないことからどんな面白いことまでできる」というのが正解なのだろう。
そしてこれが次の躓きポイントに繋がる。
躓きポイント② その性質上、包括的に記されづらい
①がわかっていれば当然のことである。
「Node.js 入門」で検索して出てくるのは当然Node.jsを1から活用する方法だ。
Node.js公式の使用例(Usage and example | Node.js v18.14.0 Documentation)にすら自分で書いたプログラムを自分で実行する方法しか載っていない。
Pythonをインストールして「Python 入門」で調べればPythonを用いてプログラムを書く方法が出てくる。そして、「Python 使い方」でもPythonを用いてプログラムを書く方法が出てくる。
これと同じ現象がNode.jsについても起こる。
「Node.jsを用いて自分がプログラムを書く方法」は大量に出てくるものの、その成果物だけを利用したいとき、つまり「Node.js上で動く任意のプログラムを実行する時に何をすればよいのか」という情報が詳細に書かれているものが見つからない。
そして、しばらくほかの成果物も実行してみたとき、あまりに簡単すぎるから誰も書かないのではないかということに気が付いた。
yarn createとかnpm createとか打てばよいのだが、あまりに簡単すぎて包括的に記される前に誰もが実際にいくつかやって会得してしまう。
こんなものはコマンドプロンプトよりも100倍簡単だからと思って誰も明示しないかもしれない。……が、わたしはこのような不文律じみたものが非常に苦手である。
npm i -g (任意の成果物の名前)
だとかが例文になる。らしい。
個々の成果物のチュートリアルにNode.jsで動くものならばこのような共通部分がある、ということはまず書かれないし(書いたところで何の得にもならない)、これを検索しようと思っても何という言葉でこの観念を表せばよいかわからなかったというのが躓きポイントとして絶望的な部分である。
今思えば、これはPythonにおけるpipに似たようなパッケージ管理ソフトなのだが、ここまで「成果物」という単語で書いてしまっているように、このようなものを「パッケージ」と言うのだ、という観念がなかったので非常にてこずった。
プログラムに関しては恥ずかしながらPythonで片手間に適当なものを書くくらいのことしかしてこなかったため、「パッケージとはライブラリの下位構造である」くらいの認識しかなかった。
AstroやVivliostyleのような大掛かりなものがパッケージだとは想像できなかったのだ。
これが大まかなわたしの敗因である。弱かった。あまりにも。
その後
Astroをインストールし、GitHubと連携し*1、Cloudflare pagesでデプロイされた、このような、まだ中身の不足している素朴なサイトを作り上げた。
躓きポイントが理解できていなかったため、原理の分からないチュートリアルには従えないという無意識の忌避感・抵抗がわたしをこのような個人サイト作りから遠ざけたのだろうと思う。
MarkdownをAstroの公式Documentのチュートリアルと同じ場所に置き、数式を使いたい場合は「astro katex」で検索して出てきたサイトの手順通りにAstroに組み込んだKatexが、Markdownファイルの最初に張り付けたKatexスタイルシートを読んで美麗に変換してくれる。素晴らしい。
今はVivliostyleやTauri(RustのGUIフレームワーク)なんかも使ってみたくなってわくわくしている。*2
*1:実はここにも壁があって、GitHub上での翻訳プロジェクトに少しだけ噛んでいた時にHDDの空き容量の都合上ローカルに落とすのが憚られてGitHub上で編集していたため、ローカルにインストールしてGitHubにPushするということ自体に抵抗があった、ということもある。そのため、GitHub Pagesをレポジトリに連携したはいいものの、なんとローカルで書いたMarkdownをPandocでHTML形式に変換し、それをレポジトリに直接アップロードするという曲芸みたいなことをしていた時期があった、という笑い話がある。
*2:もっとも、Vivliostyleに関してはVivliostyle Pubというブラウザ上で編集できるものがわたしがあれこれしている間に出てきてしまったのだが……