前置きが要らない人は:
acepadに行って,Setup/Restoreを押してenjoy!
いつでもどこでもプログラミングしたい
私は昔から,タイトルの通り「いつでもどこでもプログラミングしたい」ので,携帯端末でのプログラミングってのをずっとやってきました.久しぶりに昔の作品を掘り返してみたらこんなのが出来たので置いておきます.
この時作ったもの(や,スライドに出てくるsoyBasicも)は,内部で独自言語でインタプリタを走らせるものだったので,実用的な速度で動かせるものはできていませんでした.
acepadが目指しているもの
「携帯端末のブラウザでJavaScriptを書いて,書いたものをそのまま実行する」ことを目指して作成したのが,先ほど冒頭に示したacepadです.
携帯端末だろうがPCだろうが,ブラウザでJavaScriptを書いて実行できるのはある意味当たり前ですが,携帯端末でなるべく快適にプログラミングとなってくると,デフォルトで導入されているスクリーンキーボードではどうしても,記号などが打ちにくい場所にあったりして,快適とはいえません.
ちなみに,Codeboardという,携帯端末でもプログラミングで使う記号などを打ちやすくしたキーボードもあって,インストールして使っているのですが,どうしても不便なのは「Shiftキーで複数行選択をするときに,Shiftキーを長押しないといけない(矢印キーを2回押すと選択が解除される),さらに,ctrl+cなどを押すためにまたShiftの長押しで解除をしなければならない(でないと,Ctrl+大文字Cとみなされる)」という点でした.これが気に食わないという点だけで,「よし,新しいキーボードを作ろう」となって始めたのがacepadです.
acepadを起動するとわかるように,キーボード部分もすべてオリジナルのものになっています.なお,acepadでは,shift+矢印を押した瞬間に「編集モード」に切り替わり,コピーや貼り付けや,生成AIへの問い合わせ(!)などのキーが登場します.
で,何に使うのこれ?
携帯端末でプログラミングをしたい,という目的のために開発されているので,別に何かを作りたくて作っていません.あえて言うならacepadは「acepadを開発するために」開発されたものです.いわゆるdogfoodingです(ちょっと違う?).最初に出て来た「実用的な速度」が必要なのは,acepadを開発・動作させるのに十分なスペックが必要,と言い換えてもよいです.
基本的に、ブラウザのJavaScriptでできることはなんでもできるはずです。加えて、後述するようにnode.jsの一部の機能をブラウザだけで実現できます。
ブラウザでnode.jsを実現?
せっかくだから、ちゃんとプログラムはモジュールごとに分割して書きたいし、いっそのことnodeのモジュールぽくしたいな、よし、作ろう! と思い立ち、現状では、node.jsの次の機能をブラウザで再現しています。
- localStorageをファイルシステムに見立てた仮想ファイルシステム
- 仮想ファイルシステムに配置したjsファイル、およびnpmパッケージ(node_modules配下においてあるパッケージ)の読み込み
さらに、次の機能はおそらくnode.jsでサポートしていませんが、acepadではサポートします。
- ブラウザで動作するプログラム自身が変更したjsファイルについて、ブラウザを再読み込みをすることなく変更を反映させる
これらの機能を実現しているのは、それぞれ次のライブラリです。
-
petit-fs
- localStorageを用いた仮想ファイルシステム。localStorageなので保存容量は(ブラウザにもよりますがだいたい)おおよそ5MB程度ですが、メモリ容量限界まで格納可能なRAMディスク(もちろん再読み込みすると消えます)もサポートします
-
petit-node
- petit-fsで構築したファイルシステム上に置かれたjsファイルを実行します。importを用いて他のファイルをインポート可能です。node_modulesフォルダに置いたパッケージ名でのimportもサポートします。
次回はこのへんのライブラリについて詳しく見ていきます。あるいは、acepadのおおまかな使い方を見ていくかもしれません。