読者です 読者をやめる 読者になる 読者になる

ただの風邪。

音楽のことを中心にいろいろと書いています。

Atom + Processingの快適な環境をWindows 10でゲットするまで

きのう紹介したAtomというエディタ。Processingも実行できるらしいとのことで、試してみたらやはり快適! ……のはずだったが、よくわかんないエラーがでて一悶着したので覚書。

[目次]

AtomからProcessingのスケッチを実行するには。

Atomの長所のひとつが、パッケージというかたちでさまざまな拡張機能が利用できることだ。配布されているパッケージのなかには、Processingのコードを実行可能にするパッケージもある。Processingネイティヴのエディタに替えてAtomを使うこともできるわけだ。せっかく使いやすいエディタを手に入れたので、ついでにProcessingもいじれるようにしてみた。

Processing側の設定

まず、Processingのスケッチをコマンドライン上で実行する、processing-javaの設定をしなければならない。OSXの場合は、Processingネイティヴのエディタを経由してインストールすることができるのだけれど、Windowsの場合、システム環境設定を経由して自分でパスを通す必要がある。

スタートボタン右クリック→「システム」*1→「システムの詳細設定」→「環境変数」と辿って、システム環境変数の設定画面を表示する。

システムの詳細設定

PATHという変数が既にあれば、「編集」をクリックして、新たにprocessing-javaのあるフォルダのパスを追加する。Windows版の場合、Processingをインストールしたフォルダに無造作にころがっているので、インストールフォルダのパスを書いておけば問題ない。この欄は複数のパスをセミコロン(;)を区切りとして記述する形式になっているので、既存のパスの末尾にセミコロンを加えるのを忘れずに。誤って既存のパスを削除すると、あとで地味に困ることになるので注意。

環境変数の編集

これでProcessing側の設定は終わり。

Atom側の設定、楽勝かと思いきや……

processing-javaのパスが通っていれば、Atom側の設定はそれほど困らない。設定画面のインストールタブで、bleikamp氏によるProcessingパッケージをインストールすれば、まあだいたいOK。ついでに、Processing用の文法ハイライト表示とオートコンプリート機能も追加すれば安心。それぞれ、同氏のprocessing-languageとStefterv氏のprocessing-autocompleteが該当する。

必要なパッケージ一覧

これで任意のスケッチを適当に作成して、ctrl+alt+bで実行可能。

こんな感じで実行される。

いやーめでたしめでたし…… ではなかった。

スケッチを実行したあと、再度スケッチを実行しようとすると、エラーが出てしまう。スケッチそのものは問題なく実行できるのだけれど、毎度毎度エラーメッセージがやかましいことになる。

忌々しいエラーメッセージ

'ps' could not be spawned. Is it installed and on your path? ...

とのことなので、どうやら"ps"というコマンドが実行できなくてエラーを吐いているみたい。メッセージにしたがってパッケージのおおもとであるprocessing.coffeeファイルを覗いてみると、ps-treeというのがどうも悪さをしているらしい。

調べてみるとさもありなん、ps-treeはUNIX系OSにしか対応していないのだ。たとえばOSX上であれば、ps-treeは実行中のスケッチのプロセスIDを取得したのち、そのIDを使ってpsコマンド経由でスケッチのプロセスを終了させるようになっている。このように、プロセスの終了にしかタッチしていないから、ただスケッチを実行するぶんには特に問題がない。ウィンドウ閉じればプロセス終了するし。けれども実行するたびにエラーを吐かれると死ぬほどうざったいし、自分が気づかない凄い問題があっても困るので、どうにか改善してみることにした。

トラブルの張本人、ps-treeをいじってみる。

ps-treeをやっつけてしまえば済む話、なのだけれどこちらはなにしろ五里霧中。無駄にCygwinをインストールしたり、そもそもCoffeeScriptってなんなの、この.jsonファイルってなんだ、とかぐるぐるしてしまった。UNIX依存ではないprocess-treeというのを発見したものの、このコードをどう使っていいかわからない。なにこれ。コンパイルとかするの。.coffeeファイルってどう使えばいいの。駄目だ。これは死んだ。おれはこのままJavaScriptを勉強するほかないのか。ただおれは四角とか丸とかを飛ばして遊びたかっただけなんだ。と絶望しかけたけれど、単純なことに気づいた。process-treeの記述を参考にps-treeを書き換えればよいのだ。psコマンドの部分を、Windowsの類似するコマンドに置き換える。それくらいならできそうだな。というわけで、

    es.connect(
      spawn('ps', ['-A', '-o', 'ppid,pid,stat,comm']).stdout,
      es.split(),
      es.map(function (line, cb) { //this could parse alot of unix command output
        var columns = line.trim().split(/\s+/);
        if (!headers) {
          headers = columns;
          return cb();
        }

具体的には、ps-treeのこの部分が問題のようだ。spawn('ps', ['-A', '-o', 'ppid,pid,stat,comm']).stdout,を、うまいこと書き換える必要がある。process-treeの対応部分は以下のとおり。

    module.exports = (pid, callback)->
        process_lister_command =
            if process.platform is "win32"
                "wmic PROCESS GET Name,ProcessId,ParentProcessId"
            else
                "ps -A -o ppid,pid,comm"

一目瞭然、"wmic PROCESS GET Name,ProcessId,ParentProcessId"が探し求めていた答えだった。というわけで、ps-treeのコードを次のように書き換えた。

    es.connect(
      spawn('wmic', ['PROCESS GET Name','ProcessId,ParentProcessId']).stdout,
      es.split(),
      es.map(function (line, cb) { //this could parse alot of unix command output
        var columns = line.trim().split(/\s+/);
        if (!headers) {
          headers = columns;
          return cb();
        }

実はwmicというコマンドが何故か通らず、わざわざこいつの実行ファイルを探してパスを通し直すという余計なステップを踏む羽目にもなったのだが、なんだかんだで無事に動くようになった。エラーも吐かず元気に丸や四角と飛び回らせてくれております。

Windowsが踏みがちな地雷

Appleがどうも苦手で、OSXも好きじゃなかったんだけど、今回ばかりはくじけそうになった。まさかWindowsがこんなハブられかたするなんて……。とはいえ、Processing、PureDataSuperColliderなどなど、ユーザーが完全にMac文化圏に支配されているオーディオ・ビジュアルなプログラミング言語というのは多い。ふつうに使っているぶんにはさほど不便を感じることはないのだけれど、いざWindowsで問題に直面すると、情報が乏しいのはやはりつらい。なんならUbuntuのほうがマシじゃないか? と思いもする。

しかし今回は粘った。なぜこんなに粘れたかはわからない。別にProcessingなんか付属のエディタで楽しんでいればいいのに。それだけAtomの使い勝手がハマったのか。

いずれにせよ、どうにかなってよかったよかった。Windowsで同じようなめにあってるひとが他にもいたら、と思ったので、詳しく書いてみました。

*1:コントロールパネル経由でもOK