MyEmacsチュートリアル

はじめに

ここでは、Emacsの使い方と、私のEmacsの設定を紹介していきます。 このチュートリアルを読み終わるころには、Emacsを使いこなせるレベルになり、 チュートリアルを通してEmacsが使いやすくカスタマイズされ、 そして、さらに使いやすくカスタマイズできるだけの能力を習得できることを考えています。

質問や要望、訂正などは、

  • GitHubのIssueやPull Request(右上のリンクから飛べます)
  • twitter @yoshiki_utakata

などでお寄せください。 細かい文言修正などでもプルリク歓迎です。

対象者

このドキュメントの対象者は以下のようになっております。

  • Emacsを使ったことがあり、基本操作は分かるが、細かい設定などはわからない
  • Emacsでどのようなカスタマイズが可能なのか興味がある
  • Emacsを常用しており、他人にEmacsの設定がきになる。

また、ゆくゆくは以下のようなユーザーも対象者にしていきたいと思っています。

  • Emacsを全く使ったことがないが、使えるようになりたい

コンテンツツリー

Emacsをソースからビルドしてインストールする

なぜソースからビルドするのか

もちろん、Ubuntuのapt, Cent OSのyamなどでもEmacsをインストールすることができます。 しかし、これではダメな理由が2つあります。

  1. aptやyamを使ってインストールされるEmacsのバージョンが古い
  2. sudo権限を持っていない共用サーバーにインストールできない

ここでは、これらの問題を解決するためにソースからEmacsをビルドします。 なお、sudo権限を持っていない場合の対処はこのページの一番下に書きます。

ビルドに必要な環境の整備

Emacsをビルドするために必要な gcc, make などをインストールします。

Cent OS の場合

以下のパッケージをインストールします。

$ sudo yum -y install gcc make ncurses-devel
ubuntuの場合

ubuntuの場合、gcc, make, ncurses-dev が入っていることを確認してください。

$ sudo apt-get install gcc make ncurses-dev
Macの場合

Macはdeveloper toolsを入れておけば問題ないと思います。

ビルドしたいバージョンのemacsを探す

http://ftp.jaist.ac.jp/pub/GNU/emacs/ から、ビルドしたいEmacsのバージョンのtar.gzを探します。 今回は執筆時での最新版である24.5をインストールします。 基本的には、最新版をインストールすれば問題ないと思います。

ダウンロードしてビルドする

emacs 24.5 のURLは http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-24.5.tar.gz なので、 これをダウンロードして解凍し、ビルドします。

$ wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-24.5.tar.gz
$ tar xvf emacs-24.5.tar.gz
$ cd emacs-24.5
$ ./configure
$ sudo make
$ sudo make install

./configure で失敗する場合は、ビルドに依存するパッケージが正しくない可能性があります。

path を通す

古いEmacsが存在していると、pathが通らないことがあります。

試しにEmacsのバージョンを調べてみてください。

$ emacs --version
GNU Emacs 24.5.1
...

自分のダウンロードしたEmacsのバージョンと同じ場合は問題ありません。 違う場合は以下の用にpathを変更してやります。

$ emacs --version
GNU Emacs 23.1
...

$ which emacs
/usr/bin/emacs
sudo rm /usr/bin/emacs

$ sudo ln -s /usr/local/bin/emacs-24.5 /usr/bin/emacs

$ emacs --version
GNU Emacs 24.5.1
...

sudo権限がない場合の対処

1. sudo権限がないのでgcc,makeが入れられない

通常、サーバーを構築する段階でgccやmakeが必要となるため、これらが入っていないことは考えられません。 が、もし入ってない場合は流石に管理者にお願いして、入れてもらうことにしまよう。

2. Emacsが入れられない

Emacsをホームディレクトリ以下にインストールしましょう。

$ wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-24.5.tar.gz
$ tar xvf emacs-24.5.tar.gz
$ cd emacs-24.5
$ ./configure --prefix=$HOME/local
$ make
$ make install

このように、 --prefix をつければそこにインストールされます。 この場合、 ~/local/bin/emacs がEmacs本体になります。

./configure した時に、 --without-hogehoge をしてくださいと言われる場合がありますので、その場合は従いましょう。

インストールできたら、PATHを通しましょう。 ZSHを使ってるなら ~/.zshrc、BASHを使ってるなら ~/.bashrc に以下を追記します。

export PATH=$PATH:~/local/bin

これでシェルを再起動してみましょう。 Emacsが使えるようになった筈です。

Emacsの基本的な操作

Emacsの起動とチュートリアル

emacsを起動してみます。

$ emacs

最初は以下のような画面になっていると思います。

Welcome to GNU Emacs, a part of the GNU operating system.
...

Important Help menu items:
Emacs Tutorial               Learn basic Emacs keystroke commands
Read the Emacs Manual        View the Emacs manual using Info
...

Emacs Tutorial にカーソルを合わせてEnterを押すと、チュートリアルが始まります。 1000行程度のテキストになっており、じっくりと、実際に操作しながら学びたい人はこれを読むといいでしょう。 Emacsキーバインド、バッファ、ミニバッファ、Metaキーなどについて分からない場合はここから読んでほしいです。

これから説明するのは、Emacsの基本的なキーバインドのうち、よく使いそうなものです。

超基本的な操作

流石にこれを知らないとまずいですが、一応書いておきます。 困った時に役に立つキーも書いておきます。

キーバインド 説明
C-x C-f ファイルを開く
C-x C-s ファイルを保存
C-x k 今開いているバッファだけを閉じる
C-x C-c Emacsを終了する
C-g コマンド入力を強制終了する
C-x <左右> C-x入力後、矢印キーの左右で開いているファイルを入れ替えられます。
  • C-g は、「キー操作が効かなくなった!」という時には連打すればだいたい抜け出せます。
  • C-h はヘルプのコマンドです。 C-h C-h はヘルプコマンドのヘルプです。
  • M-x を入力したあと文字列を入力すると、それに対応した関数を呼ぶことができます。
  • M-x describe-key コマンドを入力してから、キーバインドを入力すると、そのキーバインドの説明が見られます。 - 例: M-x describe-key C-w
M-x describe-key C-w

C-w runs the command kill-region, ...
...

(個人的に)よく使うキーバインド

キーバインド 説明
C-a 行の先頭にカーソルを移動する
C-e 行末にカーソルを移動する
C-x 3 バッファを横に2分割する。C-x 2 だと縦に2分割する
C-x o バッファを分割した時、バッファ間でカーソルを移動
C-x 1 今カーソルがあるバッファを全画面にし、バッファ分割を解除
C-x 0 今カーソルがあるバッファを非表示にする

キルリング(クリップボード)

Emacsには、クリップボードのようなものとして「キルリング」と呼ばれるものがあります。

キーバインド 説明
C-y キルリングの内容をバッファに貼り付ける(ペースト)
C−k カーソルから行末までの内容を削除してキルリングに移す
C-@ 範囲選択のスタート地点を設定する
C-w 選択した範囲を削除して、内容をキルリングに移す(カット)
M-w 選択した範囲を削除せず、内容をキルリングに移す(コピー)

Emacsでコピー&ペーストをする時は、

  1. コピーしたい範囲の開始地点で C-@ を押す
  2. 範囲の終了地点までカーソルを移動させ、 C-w を押す
  3. コピー先で C-y を押す

といった流れになります。

ちなみに、 C-@ を押した後に範囲選択を中止したい場合は C-g です。

間違ってC-zした場合

Undoしようと思って C-z を押してしまい、突然Emacsが終了してしまった! ということが最初はよくあります。

これは終了したわけではありません。 C-zsuspend-emacs というコマンドです。 suspend なので、jobがバックグラウンドに移っただけです。 落ち着いて、ターミナルで

$ fg

と押せばEmacsが戻ってきます。

EmacsのUndoコマンドは C-x u です。

Emacsのカスタマイズ

Emacsの良いところの一つとして、カスタマイズ性の高さがあります。 ここでは、基本的なカスタマイズを通して、Emacsのカスタマイズについて学びたいと思います。

.emacs

.bashrc.gitconfig のようなものとして、 .emacs と呼ばれるものがあります。 .emacs はEmacsの設定ファイルです。 Emacsは、起動した時にこの .emacs の中身を見ます。

Emacsは、起動時に、

  1. ~/.emacs
  2. ~/.emacs.el
  3. ~/.emacs.d/init.el

の順に設定ファイルを探し、最初に見つかった設定ファイルを読み込みます。 通常はgitで管理がしやすい ~/.emacs.d/init.el を作成し、設定の内容を書いていきます。

Emacsが起動できなくなった場合の対処

Emacsの設定ファイルを書き間違えてしまい、Emacs自体が起動できなくなってしまう場合は、以下の方法で対処します。

emacs -q で起動する

emacs -q で起動すると、設定ファイルを読み込まない状態でEmacsを起動できます。 覚えておくと何かと便利です。

vimなど他のエディタで起動する

もちろんこういう方法があります。

設定ファイルを読み込まないようにする

init.elの名前を変更したり、空の ~/.emacs.d を作成すると、設定を読み込まなくなり、起動できるようになります。

elispについて

基本文法

elispについて超簡単に説明します。 Emacsの設定ファイルは、elispというプログラミング言語(LISPの一種)で書きます。 拡張子は .el です。 elispは関数型言語で、以下のようなの文法が基本になっています。

(hoge "huga")

これは、 hoge という関数を huga という文字列を引数にとって呼んでいることになります。

(setq tab-width 4)

setq は変数に値をセットする関数です。 tab-width という変数に整数4をセットしています。 これにより、タブの幅がスペース4つになります。

もちろん、引数を複数とる/とらない場合もありますし、引数にさらに関数をとることもできます。

コメント

; (セミコロン)から行末まではコメントとなります。

慣例として、行頭から始まるコメントにはセミコロン1つ ;; を使います。

;; タブ幅の設定
(setq tab-width 4)

行の途中から始まるコメントはセミコロン1つを使います。

(setq tab-width 4)  ; タブ幅の設定

Emacsのモードについて

Emacsには「モード」という概念があります。 モードには「メジャーモード」と「マイナーモード」があります。 Emacsが起動している時には、1つのメジャーモードと、複数のマイナーモードがあります。

例えば、〜.php を開いている時に、

  • メジャーモードとして php-mode
  • マイナーモードとして FlyC, yas が動いているとします。

php-mode は、phpのコードのシンタックスハイライトを働かせたりするためのモードです。 FlyC は、コードに文法ミスがある場合に、該当部分を表示してくれるモードでです。 yas は、コードの補完を行ってくれるモードです。

Emacsのキーバインドは、グローバルに設定したり、モードごとに設定できたりします。

グローバルに設定したキーバインドよりも、モードごとに設定されたキーバインドの方が優先されます。 そのため、設定ファイルでグローバルにキーバインドを設定しても、モードごとの設定に上書きされてしまい、 キーバインドが有効にならない場合があります。 設定がうまく動かない場合は、これを疑ってみてください。

基本機能のカスタマイズ

ここでは、私が行っているEmacsのカスタマイズのうち、 プラグインを必要としない基本機能のカスタマイズについて説明します。

ビープ音を消す

これ以上カーソルを移動できない場合などになるビープ音を消すことができます。

;; ビープ音を消す
(setq ring-bell-function 'ignore)

ring-bell-function という変数に、 'ignore という、 シンボルのようなものをセットすると、ビープ音がならなくなります。

タブではなく常にスペースを使うようにする

インデントにtabではなくスペースを使うようにします。

(setq-default indent-tabs-mode nil)

nil はelispにおいて特殊な文字で、nullのようなものです。

タブの幅を設定する

(setq tab-width 4)

オートインデントの幅や、tabの幅がスペース4つになります。 2をセットするとスペース2つになります。

UndoのキーバインドをC-zに設定する

C-zsuspend-frame を誤爆するので、C-z は普通に undo にします。 私は、 C-t をsuspendにしています。 好みの問題なので、ここではキーバインドの変更方法を学び、各自で好きなように設定してください。

;; C-z を undo に
(define-key global-map (kbd "C-z") 'undo)
;; C-t で suspend-frame
(define-key global-map (kbd "C-t") 'suspend-frame)

Emacsにおいて、undoやsuspendなどは関数で定義されています。 この設定では、キーボードの C-zundo 関数を割り当てています。

global-map は、Emacsのモードに関係なくあらゆる場面で使えるキーバインドであることを意味します。

同じキーに対して複数回 define-key が呼ばれた場合、 設定が上書きされ最後に設定したものが適用されます。

マウス操作関連

ターミナルから利用している場合は、ターミナルの設定にもよりますが、 Emacsはマウスイベントを取得できます。

;; xterm のマウスイベントを取得する
(xterm-mouse-mode t)
;; マウスホイールを取得する
(mouse-wheel-mode t)

t はelispで特別な意味を持ち、普通のプログラミング言語でいう true にあたります。 ffalse になります。

この設定をした上で、以下の設定をすることで、マウスでEmacsのカーソルを操作できたりします。 ただし、SSH接続した先でEmacsを起動した場合などは、有効にならない場合もあるので注意してください。

ホイールでポインタを移動できるようにする
;; ホイールでポインタを移動できるようにする
(global-set-key [mouse-4] (kbd "C-p"))
(global-set-key [mouse-5] (kbd "C-n"))

[mouse-4] [mouse-5] がホイールのイベントになります。 それぞれに、 C-p (カーソルを一行上に移動)などを割り当てています。 これはMacのトラックパッド向けの設定なので、逆方向にしたい場合は C-pC-n を入れ替えてください。

global-set-key(define-key global-map ...) と同じです。 実際はどちらかに統一するようにしましょう。

ポインタの移動ではなく画面をスクロールするようにする
;; ポインタの移動ではなくて画面をスクロールさせたい場合はこっち
(global-set-key   [mouse-4] '(lambda () (interactive) (scroll-down 1)))
(global-set-key   [mouse-5] '(lambda () (interactive) (scroll-up   1)))

こちらは、より直感的なホイールになります。

カーソルがある行をハイライトする

カーソルがある行をハイライトできます。 私は見づらくなるので行っていないのですが、カーソルをよく見失う人には便利かもしれません。

;; カーソルのある行のハイライトを有効にする
(global-hl-line-mode t)
;; ハイライトの色を設定します
(custom-set-faces '(hl-line ((t (:background "dark gray")))))
;; ハイライトのスタイルをアンダーラインにします
;; ただしアンダーバーが見えづらくなる問題があります
(setq hl-line-face 'underline)

矩形選択モードを利用する

TODO

el-getでプラグインを管理する

ここでは、ついに、Emacs標準機能ではない、プラグインについて触れていきます。

最初にインストールするのは、パッケージ管理ソフトであるel-getです。

プラグインとは

Emacsはカスタマイズ性に優れたエディタです。 Emacs自体にも様々な機能が付属しています。 しかし、より複雑な機能や、特定の用途にのみ特化した機能は標準では付属していないこともあります。 そこで現れるのがプラグイン、あるいはパッケージと呼ばれるものです。 例えば、Emacsから直接gitのコマンドをいじれるプラグインなどがあります。

なぜパッケージ管理ソフトが必要なのか

パッケージを追加しようと思った場合、通常は以下の手順が必要になります。

  1. パッケージを配布しているサイトに行き、パッケージをダウンロードする
  2. init.elに設定を書き、パッケージをEmacsに読み込ませる

パッケージ管理ソフトの導入によってこうなります。

  1. init.elにパッケージの設定を書く
  2. パッケージ管理ソフトがその設定を読み、必要に応じて勝手にパッケージをダウンロードしてEmacsに読み込ませてくれる

2の部分が全部自動化され、パッケージの管理が楽になります。

もちろん、ファイルをダウンロードすることが手間にならない人は、パッケージ管理ソフトを導入する必要がありません。

パッケージ管理ソフトは複数ある

packagge.el, cask, el-get など様々なパッケージ管理ソフトがありますが、 このチュートリアルではel-getを使います。 これは好みであり、必ずしもel-getを使う必要はありません。 el-getを選択した理由としては、 Emacsに特化されていて、対応しているパッケージの種類も多そうである、という点にあります。

el-getのダウンロード

当然ながら、el-get自体は自分でダウンロードしないといけません。 ここでは、el-getの導入を通して、古来ながらの「Emacsプラグインの導入手順」を学びます。

el-get本体は、 https://github.com/dimitri/el-get で管理されていますので、.emacs.d以下にcloneしましょう。

$ cd ~/.emacs.d
$ git clone https://github.com/dimitri/el-get
$ cd el-get
$ ls
README.md                el-get-build.el          el-get-check.el ...

init.elでel-getを読み込ませる

init.elの以下を追記します。 ~/.emacs.d/elisp ディレクトリを作成しておきましょう。

;; el-get のディレクトリをload-pathに追加
(add-to-list 'load-path "~/.emacs.d/el-get")
;; el-get.el を読み込ませる
(require 'el-get)
;; el-getでダウンロードしたパッケージの保存先
(setq el-get-dir "~/.emacs.d/elisp")

~/.emacs.d/el-get/ ディレクトリにある el-get.el をrequireする必要があるため、 必ずこの2つの記述が必要になります。 requireするだけではエラーになりますので注意してください。 そして最後に、el-getでダウンロードされたパッケージが入るディレクトリを設定してください。 これは、.emacs.d ディレクトリそのものではない方が良いです。

ここまで設定を記述したら、emacsを再起動してみて、設定読み込みエラーが出ないことを確認してください。 M-x el-get-list-packsges でパッケージ一覧が出てきたら導入できている証拠です。

user-emacs-directoryの設定

ここで、user-emacs-directoryの設定をしておくと便利です。 この設定はel-getとは関係ありませんが、設定しておくと後々便利です。 以下をinit.elに記述します。

(when load-file-name (setq user-emacs-directory (file-name-directory load-file-name)))

これを記述すると、上のel-getのための設定はこうなります。

;; el-get のディレクトリをload-pathに追加
(add-to-list 'load-path (locate-user-emacs-file "el-get"))
;; el-get.el を読み込ませる
(require 'el-get)
;; el-getでダウンロードしたパッケージの保存先
(setq el-get-dir (locate-user-emacs-file "elisp"))

いちいち ~/.emacs.d と記述していた部分が綺麗になります。

さて、次からはよく使われているパッケージをel-getを使ってダウンロードしてみます。

auto-completeを導入する

ここでは、ソースコードの補完を行ってくれる便利で汎用的なプラグインである auto-completeを導入するとともに、el-getの使い方なども慣れていきたいと思います。

auto-completeをel-getで導入する

auto-completeはel-getのパッケージリストに存在しているため、 init.el に追記するのは以下の1行のみです。

(el-get-bundle auto-complete)

以上でauto-completeの導入は終了です。

auto-completeのトリガーとなるキーを変更する

以下の設定を記述すると、TABキーで補完候補を選択できたりします。

(ac-set-trigger-key "TAB")

補完が表示されるまでの時間を設定する

以下の設定をすると、キーがタイプされてから0.5秒で補完が表示されるようになります。

(setq ac-quick-help-delay 0.5)

yasnippet

今度は、auto-complete並に汎用的なyasnippetを、el-getを使って導入します。

init.el への記述

基本的に以下を記述するだけで、デフォルトのsnippetは使えるようになります。

(el-get-bundle yasnippet)

記述したらEmacsを再起動させてみましょう。

yasnippetを使ってみる

デフォルトのsnippetは、 yasnippet/snippets ディレクトリにあります。 試しに yasnippet/snippets/js-mode 以下を見てみると、 log という名前のファイルがあり、 以下のような中身になっています。

$ cat yasnippet/snippets/js-mode/log
# -*- mode: snippet -*-
#name : console.log
# --
console.log($0);

これは js-mode で有効なsnippetなので、Emacsでjs-modeを起動させた後に、 log と入力してTABを押すと、このsnippetが補完されます。

Emacsをjs-modeで起動する一番簡単な方法は、.jsの拡張子がついたファイルを開くことです。

$ emacs test.js

これで、 log と入力した後にTABをれると、 console.log(); と補完されるハズです。

自作のsnippetを登録するためのディレクトリの設定をする

自分でスニペットを登録したり、どこかからダウンロードしたスニペットとyasnippetに読み込ませるために、 スニペットを保存するディレクトリを設定します。

(setq yas-snippet-dirs '((locate-user-emacs-file "snippets")))

一方で、 ~/.emacs.d/snippets ディレクトリを作成しておいてください。 このsnippetsディレクトリはgit管理下に置いておくとよいでしょう。

スニペットを新規作成する

試しに先ほど同じのjs-modeでスニペットを新規作成します。 M-x yas-new-snippet を入力してください。

# -*- mode: snippet; require-final-newline: nil -*-
# name:
# key:
# binding: direct-keybinding
# --

入力するのは、name, key, そして -- 以下のスニペット本体です。

  • nameはわかりやすい名前で良いです。
  • keyにあたるものを入力してtabを押すと、スニペットが展開されることになります。

試しにこのようなスニペットを入力してみました。

# -*- mode: snippet; require-final-newline: nil -*-
# name: put
# key: put
# binding: direct-keybinding
# --
console.log('${1:debug} ${2:value}: ' + $2);$0
  • $1, $2 , ... は、TABを押すごとに数字の順にカーソルが移動し、 一番最後に行き着くのが $0 の部分です。
  • ${1:hoge} のような記述をすると、 hoge はプレースホルダーになります。
  • 当然ながら、同じ数字の場所は、片方入力するともう片方にも同じ値が入ります。

C-c C-c を押すとスニペットを保存します。

  1. Choose or enter a table (yas guess js-mode): と表示されます。 これがjs-modeのスニペットならそのままEnter、そうでないならモード名を入力してください。
  2. [yas] Looks like a library or new snippet. Save to new file? (y or n) と聞かれるので y を押して保存します。
  3. Guessed directory (~/.emacs.d/snippets/js-mode) for table "js-mode" does not exist! Create? (y or n) と聞かれます。 js-modeのスニペットだから snippets/js-mode に保存したいが、js-modeディレクトリがないので作ります。よろしいですか?ということです。 よろしいので y と答えます
  4. ファイル名をどうするか聞かれます。デフォルトではnameと同じ値が入っているので、それでよければEnterを押します。

これでsnippetの保存ができました。早速保存したsnippetを使ってみます。 yas-new-snippet で登録したスニペットは、すぐに使えるようになります。 put と入力しTABを押してみましょう。 値を入力してみたり、TABでキーを移動させてみたりしましょう。

~/.emacs.d/snippets 以下が正しく読み込まれていることを確認するために、 一旦Emacsを終了させてみて、スニペットが働くかどうかを確認しましょう。

neotreeを導入する

ここでは、IDEのように画面右端にソースツリーを表示してくれるツール、neotreeを導入したいと思います。

neotreeをel-getで導入する

neotreeをel-getで導入するため、以下のように init.el に追記します。

;; neotree をインストールする
(el-get-bundle neotree)
;; F8でnetreee-windowが開くようにする
(global-set-key [f8] 'neotree-toggle)

[F8] は自分の好きなキーバインドに置き換えて構いません。

neotreeで新規ファイルを作成する

TODO

neotreeで便利な設定

neotreeで便利な設定たちを載せておきます

;; neotreeでファイルを新規作成した場合のそのファイルを開く
(setq neo-create-file-auto-open t)
;; delete-other-window で neotree ウィンドウを消さない
(setq neo-persist-show t)

neotreeのwindow幅を変更する

emacsは C-x 2 でwindowを縦に分割、 C-x 3 でwindowを横に分割できます。 分割したwindow間のカーソルの移動は C-x o です。 C-x 0 で現在のウィンドウを閉じる。 C-x 1 で現在のウィンドウだけの残して他を全部閉じます。 また、 C-x } , C-x { でwindowの幅を変更できます。

しかし、neotreeのwindow幅は変更できません。

これはneotreeのgithubでissueになっており(https://github.com/jaypei/emacs-neotree/issues/103)、 見てみると、https://github.com/jaypei/emacs-neotree/commit/e4979f6b648a25577ec20fa749fee56a1524bf92 によって既に修正されているように見えます。

しかし、以下の様に指定しても、 C-x } などでwindow幅は変更できません。

;; C-x }, C-x { でwindowサイズを変更できるよにする
(setq neo-window-fixed-size nil)

何故か。 見てみると、これはneotreeリポジトリのdevelopブランチにしか入っておらず、masterブランチには取り込まれておりません。 (2016年8月現在)

el-getのリポジトリを見てみると、 https://github.com/dimitri/el-get/blob/master/recipes/neotree.rcp のように、 neotreeはmasterのものを取ってくるようになっており、バージョンが古いのでこのオプションは有効でないのです。

解決方法は2つあります。自分の .emacs.d 以下にある neotree の中身を直接書き換えるか、 el-get の設定で neotree を develop ブランチに変更するかです。 次では、後者、つまりel-getを書き換えるという方法で、この問題を解決してみます。