EC2 の Amazon Linux 2 で rbenv を使わずに Ruby 2.4 を入れる (おまけに Node.js)
気づいたら Amazon Linux のメジャーバージョン(?) が 2
になっていたんですね。おめでとうございます。
面倒なので rbenv 使わず新しい Ruby を入れたい
さて Yahoo! とかで Amazon Linux ruby 2.4
とかで検索してみると、ほとんどの記事が rbenv を使ってインストールしているのですが、
まぁ面倒だしせっかくなのでなんとか rbenv を使わずに完結させたいと思った次第です。
検索結果をよく見てみると AWS 公式の記事があったので見てみると
Ruby 2.4 – 2.4 シリーズの最新バージョン Ruby が利用可能になりました。次のようにインストールします。
$ sudo yum install ruby24
なんだぁ yum
でインストールできるんじゃ〜んとか思って意気揚々とコマンドを叩くと
[ec2-user@ip-x-x-x-x ~]$ yum search ruby24 Loaded plugins: langpacks, priorities, update-motd Warning: No matches found for: ruby24 No matches found
おらんのです。
(ちょっと話題から逸れて) 2つの Amazon Linux
AWS には、2 つのバージョンの Amazon Linux: Amazon Linux 2 および Amazon Linux AMI が用意されています。
なるほどさっきのは Amazon Linux AMI を対象とした記事だったんですね。初見殺し。
僕が動かしてるインスタンスは Amazon Linux 2 の方なので単純に yum
では入れられないようです。
AMI 版(?) の方はおそらく yum
でインストールできるようになっていると思われます。
Extras Library
ですが Amazon Linux 2 になってから Extras Library という仕組みが作られたようです。
どういう仕組みで動いているかは把握していませんが amazon-linux-extras
コマンドで追加のソフトをインストールすることができます。
2018/02/04 現在で Extras Library 経由でインストールできる トピック (と呼ぶそうです) の一覧を出力してみると
$ amazon-linux-extras list 0 ansible2 disabled [ =2.4.2 ] 1 emacs disabled [ =25.3 ] 2 memcached1.5 disabled [ =1.5.1 ] 3 nginx1.12 disabled [ =1.12.2 ] 4 postgresql9.6 disabled [ =9.6.6 ] 5 python3 disabled [ =3.6.2 ] 6 redis4.0 disabled [ =4.0.5 ] 7 R3.4 disabled [ =3.4.3 ] 8 rust1 disabled [ =1.22.1 ] 9 vim disabled [ =8.0 ] 10 golang1.9 disabled [ =1.9.2 ] 11 ruby2.4 disabled [ =2.4.2 ] 12 nano disabled [ =2.9.1 ] 13 php7.2 disabled [ =7.2.0 ] 14 lamp-mariadb10.2-php7.2 disabled [ =10.2.10_7.2.0 ]
想定したよりも利用可能なトピックは少なかったですが、主要なアプリケーションの最新バージョンが一通り揃っています。
yum
でインストールできるバージョンと比較してみると以下の通りになりました。(これも 2018/02/04 現在)
パッケージ (トピック) | yum での最新 | extras での最新 |
---|---|---|
Ansible | N/A | 2.4.2 |
Emacs | 24.3 | 25.3 |
Memcached | 1.4.15 | 1.5.1 |
Nginx | N/A | 1.12.2 |
PostgreSQL | 9.2.23 | 9.6.6 |
Python 3 | N/A(?) | 3.6.2 |
Redis | N/A | 4.0.5 |
R言語 | N/A(?) | 3.4 |
Rust | N/A | 1.22.1 |
Vim | 7.4 (インストール済) | 8.0 |
Go言語 | 1.8.3 | 1.9.2 |
Ruby | 2.0.0 | 2.4.2 |
Nano | 2.3.1 (インストール済) | 2.9.1 |
PHP | 5.4.16 | 7.2.0 |
Ruby 2.4.x をインストール
ということで Extras Library を経由して Ruby 2.4 をインストールします。
$ sudo amazon-linux-extras install ruby
細かいバージョン指定もできるようなので、EC2 のドキュメントを是非チェックしてみてください。 これで Ruby 2.4 + Gem が使えるようになりました。
[ec2-user@ip-x-x-x-x ~]$ ruby -v ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] [ec2-user@ip-x-x-x-x ~]$ which ruby /usr/bin/ruby [ec2-user@ip-x-x-x-x ~]$ gem -v 2.6.13 [ec2-user@ip-x-x-x-x ~]$ which gem /usr/bin/gem
めでたし。
(番外編) そういえば Node.js はどうやって入れたら良いの?
[ec2-user@ip-x-x-x-x ~]$ amazon-linux-extras list | grep node [ec2-user@ip-x-x-x-x ~]$
・・・。
[ec2-user@ip-x-x-x-x ~]$ yum search nodejs Loaded plugins: langpacks, priorities, update-motd === Matched: nodejs === http-parser.x86_64 : HTTP request/response parser for C http-parser-devel.x86_64 : Development headers and libraries for http-parser [ec2-user@ip-x-x-x-x ~]$
・・・・・・・・・・・・・・。
正解は
パッケージマネージャを利用した Node.js のインストール | Node.js
こちらを参考にしてみてください(丸投げ)。なるほどリポジトリを追加するんですね。分かるか。
VDMX で NumFX を利用した便利なレイヤー表示操作
お知らせ 1/1(月) に同様の内容の記事を投稿していましたが、中途半端なまま放置してしまったため、書き直しという形で本記事を投稿しました。
挨拶
改めまして、明けましておめでとうございます。本年も何卒よろしくお願い致します。
年越しの WEEKEND RAVERS NYE (#WRNYE) での VJ もなんとか無事に終わり、 2018年幸先よく VJ をスタートすることができたかなと思います。
さて、#WRNYE より前に 12/30 にハトトさんのお宅で開催された #HatotoHouse に招待されたので、 VDMX ヘビーユーザーに囲まれてビクビクしながら自分の VDMX プロジェクトファイルを紹介したのですが、 予想に反して反響がありました。大変嬉しい限りです。
一時的なレイヤー非表示(ミュート)や単独レイヤー表示(ソロ)
特に反響(?)が大きかったのが、一時的にあるレイヤーを非表示にしたり(以下、ミュート)、 一時的にあるレイヤーだけを表示する(以下、ソロ)仕組みでした。
全国 1億人の VDMX ユーザーのほとんどが Layer Opacity
に
MIDI コントローラーの縦フェーダーに割り当てて操作していると思います。
もちろん縦フェーダー操作だけでもミュートやソロは可能ですが、
慌てて瞬間的にフェーダーを操作すると僕はよくミスったりフェーダーのつまみを飛ばしてしまったりします。
そこで私は縦フェーダーの他に、ボタンを押したらミュートしたりソロにできるようにしています。 KORG の nanoKontrol2 を愛用していますが、以下のように割り当てて使っています。
これらを VDMX の Num FX という機能を使って実現していきます。
前提と準備
今回は 3レイヤー用意し、
それぞれの Layer Opacity
をお好みのコントローラーの縦フェーダーにマッピングしているものとします。
今回はコントローラーの代わりに、上の画像の様に Control Surface を使ってでっち上げたもので解説します。 頭に L1, L2, L3 とついてるボタンやフェーダーがそれぞれ レイヤー1, レイヤー2, レイヤー3 を操作します。
レイヤーミュート
簡単な方から、ミュートを実装しましょう。Resolume だと B
ボタンに該当します。
具体的には、Mute
ボタンを押したら縦フェーダーがどんな値であろうと、Layer Opacity
の値を強制的に 0
にするようにします。
まずはレイヤー1 の Layer Opacity
の UI Inspector を開きます。
下の方にボタン Edit Num FX Chain
があるのでクリックすると Number FX Chain Inspector
という画面が出てきます。
さて名前からお気づきの方もいらっしゃると思いますが、
Num FX
は外部のコントローラからの入力値に対してエフェクトをかけることができる機能です。
例えば 縦フェーダーの入力値に対して常に 0.5 を掛ける エフェクトを追加すれば、
縦フェーダーを目一杯上まで押し上げても VDMX 側で受け取る値は 0.5
までしか上がりません。
ということで、Number FX Chain Inspector 画面の Add Asset:
から FX > Multiply
を追加します。
Multiply
は外部コントローラーからの入力値に対して、指定した値を掛ける Num FX です。
初期値では 1.25
が指定されてるので、例えば縦フェーダーを真ん中の位置にスライドすると、
VDMX 側では 0.5 * 1.25
、つまり 0.625
として受け取られます。
また NumFX 全部に言えますが、 VDMX で映像に対して使うエフェクト同様右上のボタンで ON, OFF が切り替えられます。
最後に、Mute
ボタンを Multiply の ON, OFF に割り当て、
Multiplier の値を 0.00 にすると完成です。
これによって、Mute
ボタンを押すと Layer Opacity を 0.00 に固定する NumFX が有効になります。
あとは他の全てのレイヤーに対して同じ様に NumFX を仕込めば完成です!
ちなみに、NumFX が有効になっている場合は四角にN
のマークがつきます。
単独レイヤーのみ表示 (ソロ)
仕様
次に複雑になりますが、ソロ機能を実装していきます。Resolume だと S
ボタンに該当します。
ここでは各レイヤーは 3つの状態を持つことになります。
- ソロ機能が無効であり、自身のレイヤーが表示されている。
- ソロ機能が有効であり、現在自身のレイヤーが選択されているため自身のレイヤーだけ表示されている。
- ソロ機能が有効であり、現在他のレイヤーが選択されているため自身のレイヤーは非表示になっている。
実現するためには以下の項目について VDMX 側でデータとして持つ必要があります。
- 現在ソロ機能が有効になっているかどうか
- ソロ機能が有効になっている場合、現在選択されているレイヤーはどれか
今回は VDMX 側がデータとして持つ部分を Control Surface を使って実現し、あとはミュートの時と同じく NumFX Multiply
を使っていきます。
なお Control Surface でのデータの保持の仕方は色々な方法があると思いますので、
この記事は参考程度にして自身のしっくりくる方法に落とし込んでいただけたら幸いです。
Control Surface の作り込み
まず、単独で表示するレイヤーとしてどれが指定されているかを Multi-Button
で表現します。ボタンの数は レイヤーの数 + 1 用意し、Toggle Buttons?
オプションと Mutually-exclusive?
オプションの両方にチェックをつけ、Publishing Properties を Publish index of last button
にしましょう。Toggle Buttons?
と Mutually-exclusive?
については説明が面倒なので省きますが、ご自身で試していただけると納得の挙動をすると思います。
次にソロ機能が有効になっているかどうかを表すための Button
を追加し、先程追加した Multi-Button
をこのボタンの Receiving
に追加します。
さて、先程 Multi-Button
の Publishing Properties を Publish index of last button に、つまり選択したボタンの番号を他のコントローラに伝えるようにしたわけですが、それによって番号が 1
以上のボタンを選択しているときに Button
は ON の状態になります。
ただし、Multi-Button
の発するデータが Publish index of last button の状態だと扱いづらいため、もう一つ同じ個数の Multi-Button
を用意し、こちらは Publish as many BOOLs の状態にしておきます。そして新しい Multi-Button
の Navigation > Choose by index
に以前の Multi-Button
を追加します。
これで Control Surface の作り込みは完了です。上の画像での Solo activated?
ボタンが「ソロ機能が有効になっているかどうか」、Solo activated layer output
が「現在単独表示するレイヤーとして選択されているレイヤー」を表現してくれています。
コントローラーと Control Surface と Layer Opacity の連携
ソロ機能の完成に近づいてきました。まずは外部コントローラーの Solo
ボタンを Control Surface の 最初に作った Multi-Button
に対してマッピングします。
なお、コントローラーの L1 Solo
, L2 Solo
, L3 Solo
は Toggle button?
オプションのチェックを外しています。こちらもご自身で挙動を確認していただけると幸いです。
次に、ミュートの時と同じ様に Layer Opacity
の Number FX Chain Inspector を開き、同様に FX > Multiply
を追加します。
そして以下の画像の通りマッピングを行います。注意としては、Multiplier
の最大値が 1.00
になるようにフェーダーを設定しておくのを忘れずにお願いします。
これを全レイヤーに対して行えば、ソロ機能の完成です。
ちなみに先程作った Control Surface はもう見せる必要がないので僕は消してしまいます。プログラムで関数のような裏方の作業をしてくれる Control Surface のことをよく「隠し Control Surface」とか僕は言ったりしています。
最後に
拙い説明だったと思いますが、いかがでしょうか。初めはとっつきづらいと思いますが Control Surface と NumFX で VDMX はより便利になります。ちょっとしたプログラムを組む感覚だと思います。是非試してみてください。
告知
- 1/18 (木) アッパーチューナー第2弾 #アパチュナ @ 渋谷 nagomix 告知ページ
- 1/27(土) ??? @ 渋谷 VUENOS
- 3/18(日) ??? @ 渋谷某所
本年もよろしくお願い致します🙇
自分の VDMX プロジェクトファイルについて (主に NumFX使ったやつの解説)
改めまして、明けましておめでとうございます。無事大晦日から元旦にかけての Weekend Ravers NYE も VJ をやりきることができました。
さて、以前 VJ さんのお宅で開催された VJ 会議 feat. 寿司 にお邪魔した際に、僕の VDMX のプロジェクトファイルを見ていただき思いの外反響 (?) があったので、 その中でも目立つ箇所とその実装方法的なのを紹介しようと思います。
この記事での前提と準備
基本的に操作は KORG の nanoKontrol2 (以下、ナノコン) で行うものとします。
フェーダー・ノブ・ボタン S
M
R
の 1セットで 1つのレイヤー操作します。
また、左から順にレイヤー1, 2, 3... を操作するものとします。
これは僕のやり方に近いというだけなので、もし参考にされる場合は各自の方法 (お持ちの MIDI コンや VDMX の Control Surface 等) に落とし込んでいただければと思います。
では説明していくにあたって、とりあえずレイヤーをいくつかとそれぞれのプレビューを用意しておきましょう。
そして、それぞれの Layer Opacity
にナノコンの縦フェーダーを割り当てておきましょう。それでは解説に入ります。
ミュート機能
ちょうど「Mute」の頭文字なので、ナノコンの M
ボタンを押したらそのレイヤーがミュートされる、つまり Layer Opacity
が強制的に 0.00
になるようにします。仕様は以下の通りです。
- 1回
M
ボタンを押すとミュートが有効になる - もう 1回
M
ボタンを押すとミュートが解除される
これを Number FX の機能を使って用意します。今回の状況で言えば縦フェーダーの値で Layer Opacity
を弄っているわけですが、その縦フェーダーの値に エフェクト をかけることができます。
例えばレイヤー2の UI Inspector を開いてみましょう。下の方に Edit Num FX Chain
ボタンがあるのでクリックします。
すると、Number FX Chain Inspector
というウィンドウが出てくると思います。
では、右上の Add Asset:
から FX > Multiply
を選びましょう。
なんとなく想像つく方もいらっしゃると思いますが、これでナノコンの縦フェーダーの値にある数を掛け算した結果を Layer Opacity
として使うことができます。初期値では 1.25
なので、縦フェーダーの値 x 1.25 が Opacity として使われます。もし Multiplier
に 2.00
を与えておけば、縦フェーダーを半分程度上げただけで Layer Opacity
は 1.00
になっていますし、逆に Multiplier
に 0.50
を与えると、縦フェーダーを全部上げても Layer Opacity
は 0.50
までしか上がりません。
また VDMX の通常のエフェクトと同じく右上の On
Off
ボタンを押すと、NumFX の有効無効を切り替えられます。
前置きが長くなってしまいましたが、僕のミュートの実装方法は NumFX Multiply を用意して 値を 0 にし、ナノコンの M
で On Off を切り替える というものです。最終的に出来上がったものが以下のようになります。
ソロ機能
すみません近日中に書きます。(2018.01.01現在)
ということで
Number FX で楽しい VDMX ライフを!
余談
パーティー中に他の方の VDMX を見てふと思い立って増築した自分のプロジェクトファイルがこちらになります。
そして増築直後
できるVJなので画面にメニューバーが出た瞬間を逃さなかった pic.twitter.com/uVppcLBxPh
— zukutya (@zukutya) 2017年12月31日
ごめんなさい、僕でした。 https://t.co/PzuYieClfz
— VJメニューバー (@yadex205_vj) 2017年12月31日
VJ中にメニューバーがでても気にならないように音に反応してメニューバーが上下するクソquartz composer作りました!!!! pic.twitter.com/ethrj5wJur
— VDJ:gekko限定美嘉爆死 (@gekko_vdj) 2018年1月1日
今年は荒れそうです。本当にメニューバー出さないよう気をつけます・・・。
2018年明けましておめでとうございます。
明けましておめでとうございます。Yadex205 です。
昨年 2017年は大学院中退や VJ チーム SabaLeoN に所属したこともあり、結果として VJ させて頂ける機会が増えました。 本当にありがたいことですし、出演させて頂けて本当に楽しい時間を何度も過ごすことができました。 繋がりも増え機材も増え、楽しい経験も増え人生で一番充実していた 1年だったと思います。
アルバイトの方では Ruby on Rails に触れてウェブアプリケーションやプログラミングについての知識も身についたと思います。 ISUCON 予選にも参加し、自分の技術がまだ未熟なのを実感しつつ、知らない世界を覗けたことも大変大きかったです。
今年ももちろん VJ をより一層頑張っていきたいのに加え、 4月から社会人になりますのでそちらでも成長していきたいと思います。
2017 年度お世話になったイベント
日付 | イベント名 or ハッシュタグ | 会場 | 出演形態 |
---|---|---|---|
1/22 | 良い曲 | 早稲田 茶箱 | 個人 |
1/25 | アイドルVJ | 渋谷 Camelot | 個人 |
5/6 | Happiness | 武蔵小杉 AlphaCross | 個人 |
5/27 | #アジアニ 3 | 渋谷 Clubasia | 個人 |
6/10 | #揺らす | 中野 Heavysick Zero | 個人 |
7/22 | IMAP++ #imappp | 渋谷 WhiteSpaceLab | 個人 |
8/5 | アイドルVJ | 渋谷 Camelot | 個人 |
9/10 | VJ体験交流会 | 東心斎橋 Libera | 客 |
9/24 | #NNG01 | 青山 fai | 個人 |
10/07 | DefDistortion 42 | 渋谷 R-Lounge | SabaLeoN として |
10/09 | アイドルVJ | 渋谷 Camelot | 個人 |
10/27 | #アジアニ 4 | 渋谷 Clubasia | 個人 |
11/3 | DefDistortion #43 | 渋谷 R-Lounge | SabaLeoN として |
11/3 | GOTTA VISION #ごった | 新大久保 UniqueLaboratory | 個人 |
11/4 | #しなすたリリパ | 渋谷 nagomix | SabaLeoN として |
11/9 | #アパチュナ | 渋谷 nagomix | 個人 |
11/11 | BunGeee☆ 50 | 京橋 Beronica | 個人(飛び入り) |
11/22 | Re:animation 11 | 新木場 STUDIO COAST (ageHa) | SabeLeoN として |
11/25 | #dolive 03 | 渋谷 LoungeNeo | 個人 |
11/26 | Supersonic | 渋谷 WOMB | SabaLeoN として |
12/02 | DefDistortion #44 | 渋谷 R-Lounge | SabaLeoN として |
12/10 | アイドルVJ | 渋谷 Camelot | 個人 |
12/16 | ravish 10 #ravish | 渋谷 R-Lounge | 個人 |
12/22 | Supersonic Next | 渋谷 R-Lounge | SabaLeoN として |
12/31 | Weekend Ravers NYE #wrnye | 渋谷 Clubasia | SabaLeoN として |
イベントの主催者様出演者様、スタッフ様お客様に大変お世話になりました。本当にありがとうございました。
2018年もどうぞよろしくお願いいたします! VJ オファーお待ちしております!
Case-sensitive な macOS 上で Cinder のビルドにコケた話
ご無沙汰しております。
最近 macOS 10.12 をクリーンインストールする機会があり、もちろん SSD も綺麗にフォーマットしたわけですが、 今まで見落としていたのか「Case-sensitive」(日本語: 大文字/小文字を区別) というものに興味を惹かれて有効にしてみました。
そしたらまさかの Adobe ソフトがインストールできないとまぁ大笑いだったわけですが。
「大文字と小文字が区別されるドライブへのインストールはサポートされていません」エラー
Mac で Illustrator が使えないのは辛いですね・・・。
Cinder のビルドができない
openFrameworks のライバル(?) である Cinder というものがあり、 公式サイトから既にビルド済みのパッケージをダウンロードすることができますが、 Github 上のリポジトリからソースコードをクローンしてきて CMake でビルドすることもできます。
ところがいざビルドしようとすると、CMake が以下のようなエラーを吐いて止まってしまいます。
CMake Error at proj/cmake/libcinder_target.cmake:14 (add_library): Cannot find source file: path-to-libcinder/src/AntTweakBar/TwOpenGl.cpp Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx
src/AntTweakBar/TwOpenGl.app
が見つからないって言っていますね。
では src/AntTweakBar
ディレクトリを見てみましょう。
なんと TwOpenG"""L""".cpp
という名前で存在しています。
おそらく開発陣が CMake ファイルを作られた時に TwOpenG"""l""".cpp
と誤植 (と言えるのか) してしまったのかと思われますが、
普通の macOS なら Case-Insensitive (大文字/小文字を区別しない) 環境で動かしていると思いますし、
ビルドに失敗することもなかったのでしょう。実際僕も以前ビルドした時にはこんな問題は起こらなかったです。
Issue を書き込みました。
ぶっちゃけこれが言いたかっただけなのですが、この件は一応 Issue を投げました。
まぁファイル中の 1文字を直すだけなので、手元にクローンしたやつを書き換えるだけでとりあえず対応はできていますけどね。
まとめ
Case-sensitive なディスク上で macOS を動かすとたまに不便になります。
話が逸れますが、Docker for Mac で 大文字小文字の区別関連で苦労されてる方もいらっしゃるようですね。
こちらは Case-sensitive な方が良いというパターンですので、一概に Case-sensitive はダメ、とも言い切れないですね。
告知など
いつも通りの唐突な告知です。以下のイベントで VJ で出演いたします。
#アジア二 第4期
GOTTA VISION
また、この度 VJチーム SabaLeoN に所属することになりましたので、 SabaLeoN メンバーとしても各所に VJ しに行きます。
何卒よろしくお願いいたします。
Capistrano3 でリモート側の環境変数設定されてないなって思ったら
どうでも良いことで 2時間くらい食って悔しかったのと日本語記事がなかったように思えたので書きなぐりました。
症状
Capistrano でデプロイ先で、.bashrc
に書いた環境変数が設定されないまま処理が行われてしまう。
対処
以下の Stackoverflow に答えがありました。
デプロイ先の .bashrc
なりシェルの設定ファイルの先頭に
# If not running interactively, don't do anything
みたいなコメントと、その直後に return
してそうな箇所はありませんか?
Ubuntu など一部のディストリビューションのシェル設定ファイルの先頭には「インタラクティブシェルじゃないならこの後の設定は読み込まない」ような記述がされていることがあるため、その記述をコメントアウトするなりその記述の前に設定を書くなりの対策をとれば良い感じになると思います。
AmazonLinux だとそのような記述がなかったから完全に見逃してた・・・。
flycheck で走らせるプログラムを探すのに direnv に手伝わせる時の注意点
挨拶
またしても前回の投稿から間が空いてしまいましたが、なんと就活が終わっていたり 大学院を中退していたりと色んなことが起こりました。ひと段落したので VJや動画制作やWebデザインなど、もっと取り組んでいきたいと思います。
flycheck が使う文法チェック系プログラム
Emacs でリアルタイムに文法チェックを行うのに便利なのが flycheck
ですが、
flycheck
自体がコードを調査しているのではなく、rubocop
やら eslint
やらを
実行しているのはご存知かと思います。
それらのプログラムはどのように探されているかというと、シェルが $PATH
から
プログラムを探すように、Flycheck は Emacs 上の変数 exec-path
から探しています。
公式ドキュメントにその記述があります。
また、exec-path
の中身は
M-x describe-variable RET exec-path
で見ることができます。
direnv を使ってプロジェクト毎の文法チェックプログラムを探させる
少し話が逸れますが、eslint
だったり rubocop
と言った文法チェック系のプログラムは、
なるべくグローバルにではなくプロジェクトのディレクトリ内に置いときたい派です。
なんとなくなのでちゃんとした理由があるわけではないです。
なので、例えばNode.js 系のプロジェクトなら npm
で eslint
を導入すると、
node_modules/.bin
ディレクトリに実行ファイルが置かれるような状態です。
普通はそのようなディレクトリには $PATH
が通ってませんが、direnv
を使えば
プロジェクトのディレクトリ下に入った時だけ $PATH
にそれらを含めることができます。
.envrc
というテキストファイルをプロジェクトのルートディレクトリに置き
export PATH="node_modules/.bin:$PATH"
と記載してやると良い感じになります。細かい話などは割愛しますので調べてみてください。
そして、普通シェルから立ち上げた Emacs は $PATH
から exec-path
に値が丸写しされますし
(GUI の場合は exec-path-from-shell
というパッケージが要るそうです)、
direnv
管理下のファイルを Emacs で開けば .envrc
に書かれた内容も
もちろん exec-path
に反映されています。
.envrc での $PATH の追加の仕方に注意
ただし、上記の export PATH="bin:$PATH"
のように相対パスで指定すると、実はうまく動かない時が出てきます。
例えばファイル構成が以下の場合を想定します。
- /your/great/project/.envrc
- /your/great/project/node_modules/.bin/eslint
- /your/great/project/code1.js
- /your/great/project/nested/code2.js
.envrc
には
export PATH="node_modules/.bin:$PATH"
が記載されています。
このとき、Emacs で /code1.js
を編集しているときは $PATH
に従って /node_modules/.bin/eslint
を見つけにいきますが、/nested/code2.js
を編集しようとすると /nested/node_modules/.bin/eslint
を探しに行こうとして見つからずに失敗します(多分そうだと思います)。
なのでEmacs の flycheck を利用する場合は $PATH
は必ず絶対パスである必要があります。
PATH_add で楽して絶対パスを指定する
では .envrc
には必ず絶対パスを書く面倒なことをしなくちゃいけないのかというとそうではなく、
PATH_add
という便利機能が備わって要るので、それを使いましょう。
PATH_add node_modules/.bin
これによって $PATH
には /your/great/project/node_modules/.bin
のように
絶対パスで追加されます。
結論
プロジェクトディレクトリ以下に文法チェック系のプログラムがあり、
かつ flycheck
にそれを見つけさせるために direnv
を使う場合は、
PATH_add
を使った方が良いと思います。
告知
5月中に 2件VJやります。
初めて学外でVJやった 武蔵小杉アルファクロス 様でまたVJできるのとても楽しみです。 エイジアも2回目になります。前よりゴリゴリ視力削っていきたいです。
お時間あれば何卒よろしくお願いいたします。