3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CWLAdvent Calendar 2017

Day 9

Emacs でも CWL を編集したい!

Last updated at Posted at 2017-12-08

CWL を編集する際に、キーワードの色分けなどがないとしょんぼりしますよね。
また、文法チェックくらいは自動でやって欲しいです。

この問題を何とかするため、Emacs で CWL を編集する cwl-mode を作成して公開しました

インストール方法

package.el 用に MELPA リポジトリを追加

cwl-mode は MELPA のリポジトリに収録されています。
package.el を使ってインストールできるように、以下のコードを init.el に追加します。

init.el
(require 'package)
(add-to-list 'package-archives
 '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

cwl-mode のインストール

M-x package-install cwl-mode でインストールできます。

(オプション) Flycheck のインストール

Flycheck をインストールすることで、CWL の文法チェックを自動で行うことができます。
Flycheck も MELPA に収録されているため、M-x package-install flycheck でインストールできます。

文法チェックに必要なツールのインストール

Flycheck の CWL チェッカーでは、schema-salad-toolSALAD 形式で記述された CWL の文法定義ファイルを利用して文法チェックを行います。

schema-salad-toolPyPI に収録されているため、以下のコマンドでインストールできます。

$ pip install schema_salad

文法定義ファイルは CWL の Github リポジトリから持ってくる方法もありますが、今回は CWL のリファレンス実装である cwltool に付属しているものを利用します。

cwltool も PyPI に収録されているため、以下のコマンドでインストールできます。

$ pip install cwltool

CWL チェッカーの設定

以下のように flycheck-cwl-schema-path に、CWL の文法定義ファイルの CommonWorkflowLanguage.yml を指定します。
ファイルのパスは環境によって異なるため、各環境に合わせて変更してください。

init.el
(setq flycheck-cwl-schema-path "/Users/tom-tan/.pyenv/versions/3.6.2/lib/python3.6/site-packages/cwltool/schemas/v1.0/CommonWorkflowLanguage.yml")

できあがり!

.cwl の拡張子のファイルを開くと、自動で色分けしてくれるのがわかると思います。
また Flycheck をインストールした場合には、オンザフライに文法チェックをしてくれます。
これで CWL を書き放題ですね!

See also: Let's write CWL with Emacs! (英語版)

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?