More than 1 year has passed since last update.

はじめに

 Julia の REPL の中で、プログラム・ソースを読み込む方法を紹介します。関連するディレクトリ操作の命令も説明します。
 以下では、Windows上での実行例を示します。

include : プログラム・ソースを読み込む

 include(path) は、外部ファイルを読み込んで評価(実行)します。path は、読み込むファイルのパス名です。

 例えば、Windows ユーザの tenfu さんが、デスクトップに作った a.jl というファイルを読み込むには

julia> include("c:\\Users\\tenfu\\Desktop\\test.jl")
bar (generic function with 1 method)

と打ち込みます。\は エスケープ文字ですから、二つ重ねないといけません (\ は (半角の) に見えるかもしれません) 。
 ファイルを読み込むと、そのファイルを評価した結果が印字されます。上では、関数 bar を定義したと表示されました。
 指定したパスにファイルが見つからないと
ERROR: could not open file ファイル名
という例外が発生します。

カレント・ディレクトリの操作

 パス名は (カレント・ディレクトリを基準にした)相対パスで指定することもできます。そのためには、カレント・ディレクトリを操作できないといけません。Un*x シェルのコマンドと同じ命令が、Juliaで使えます。以下で説明しない命令は、Julia のドキュメントを参照してください → Julia FileSystem http://docs.julialang.org/en/release-0.4/stdlib/file/

pwd : カレント・ディレクトリを得る

 pwd() で、カレント・ディレクトリの文字列が得られます。

julia> pwd()
"c:\\users\\tenfu\\desktop"

 includeの引数に、相対パスを指定できます。

julia> include("test.jl")
julia> include("..\\desktop\\test.jl")

cd : カレント・ディレクトリを変更する

 cd() で、カレント・ディレクトリを変更します。

julia> cd("c:\\users\\tenfu\\Documents")

julia> pwd()
"c:\\users\\tenfu\\Documents"

ファイル名は入力補完できる

 REPLで、ファイル名・ディレクトリ名を補完できます。
 例えば、cd("c:\\users\\tenfu\\ などと、ディレクトリの区切り文字 \\を打ち込んだ時点で、TAB文字を入力すると、そのディレクトリのファイル名一覧が得られます。
 ファイル名を途中まで打ち込んだ時点で、それに続くファイル名の候補が一つしかなければ、TAB入力で補完されます

edit : エディタを起動する

 edit(path, [line]) で、エディタを起動します。path は編集するファイルのパス名です。第2引数 line は行番号です (省略すると 1 )。

julia> edit("c:\\users\\tenfu\\Desktop\\test.jl")
Unknown editor: no line number information passed.
The method is defined at line 1.
julia> 

 起動するエディタは、環境変数 JULIA_EDITOR, VISUAL, EDITOR に (そのパスを)設定しておきます。
 起動するエディタが指定されていないと、Unknown editor のメッセージがでます。Windows環境では、そのファイルを編集するアプリケーションが起動されます (あるいは、それを指定するように促されます)。
 エディタが起動すると、プロンプトに戻ります。

 エディタの起動には、もう一つの方法があります。
 edit(func, [types]) とすると、関数 func を定義したファイルを編集します。第2引数 type (省略可)には、編集したい関数 funcの型を指定します。

julia> edit(bar)
Unknown editor: no line number information passed.
The method is defined at line 7.

 関数に複数の型があり特定できない場合は ERROR: function has multiple methods; の例外が出ます。methods(func) で関数型を調べて、特定しましょう。
 この命令で編集できる関数は、プログラム・ソースが与えられた関数です。REPLから直接定義した関数は編集できません (残念です)。
 ユーザが定義した関数だけでなく、Julia ライブラリの関数も、定義された場所が特定でき、編集できてしまいます。副作用を残さないように、注意してくださいね。

less : 関数定義を閲覧する

 
 関数定義を閲覧したいなら、editではなく、less を用いる方が安全です。
 less(func, [types]) とすると、関数 func を定義したソース(の部分)を閲覧できます。第2引数 type (省略可)には、閲覧したい関数 func の型を指定します。

julia> less(bar)
    foo()
end

REPLとエディタを用いた開発手法

 自分の使いなれたエディタで、Julia プログラムを編集しましょう。include命令を用いてソースプログラムを読み込んだら、REPLから、すぐに関数動作を試すことができます。

 REPLや Jupyter で以前作業していた際、注意すべき振舞いに遭遇しました。( 例 → http://qiita.com/tenfu2tea/items/6bcbdd7586ea070cc25d の最終パラグラフからコメントの議論を参照。本文は 2015/12/23時点で未修正ですが、そのうち修正します)。この振舞いにびっくりないためにも、プログラムはファイルに書いて読み込んだ方がよいです。