各種言語のパッケージングとテスト
各種言語でパッケージとテストの作成を練習しています。
パッケージング(プロジェクト作成支援)
- Elixir:
mix new proj
で雛形がディレクトリごと作成される。 - NodeJS:
npm init
で package.json のみが作成される。ディレクトリ構成に決まりがあるのかどうかわからない。 - Golang: 支援なし。ディレクトリ構成の決まりもなし。ただしプロジェクトは $GOPATH/src/github.com/user_name/project_name/ に置く必要がある。bitbucket.org も可。
- python: 支援なし。setup.py の作成がキモ。ディレクトリ構成に決まりがあるらしいけど、まだ良くわかっていない。
- PHP: composer と PHPUnit を使った。かなり時間がかかってしまった。
- Ruby:
bundle gem rbmto
で雛形が作成される。 - Perl: cpanm と minilla を使うと良い。
minil new Mto
で雛形ができる。 - Csharp:
dotnet new console
で雛形が作成される。Ver 1 系ではdotnet restore
もしないといけない。 - Lisp: 作業しない。
- Scheme: 作業しない。
- Lua: 作業しない。
テスト
- Elixir: test/ 以下に「ライブラリ名_test.exs」というファイルがある。
mix test
でテストが可能。 - NodeJS: mocha が有名らしいがデフォルトのものは存在しない。自分でスクリプトを書けば
npm test
で実行できるそうな。適当にでっちあげた。 - Golang: 「ライブラリ名_test.go」というファイル名にする。
go test
でテストが可能。 - Python:「test_ライブラリ名.py」というファイル名にする。tests/ 以下にまとめると良いらしい。その中で
python3 test_xxx.py
でテストが可能。python3 setup.py test
でも実行が可能になった。 - PHP: phpunit.xml を設定していれば
phpunit
のみでテストが走る。 - Ruby:
rake test
でテストをする。 - Perl:
minil test
でテストができる。 - CSharp:
dotnet test
でテストができる。
公開場所
- Elixir: Github, Bitbucket が可能。
mix escript.install github user_name/project_name
。$HOME/.mix/escripts/ 以下に入る。つまりローカル環境。ここにパスを通しておくと吉。 - NodeJS: GitHub, Bitbucket が可能。
npm install -g github:user_name/project_name
。NodeJS をインストールしたディレクトリの lib/node_modules/ 以下 に展開され、実行ファイルは bin にリンクが作成される。インストール先によってグローバル環境またはローカル環境になる。NodeJS をインストールした段階で /親/node/bin/ にパスを通しているハズなので、すぐに実行できるはず。npm install github:user_name/project_name
。-g
を付けないとカレントディレクトリに package-lock.json と node_modules/ ディレクトリが作成され、その中にダウンロードされる。npm install -g github:user_name/project_name --prefix=$HOME/node_modules
とすると好きな場所にインストールすることができる。
- Golang: GitHub, Bitbucket が可能。
go get github.com/user_name/project_name
。$GOPATH/bin/ 以下に入る。場所にもよるけれど、通常ローカル環境。 - python: GitHub, Bitbucket が可能。
sudo pip3 install git+https://github.com/user_name/pymto.git
で /usr/local/lib/python3.6/site-packages/ 以下にライブラリ、/usr/local/bin/ 以下に実行ファイルがインストールされる。グローバル環境。pip3 install git+https://github.com/user_name/pymto.git --user
で $HOME/.local/lib/python3.6/site-packages/ にインストールされる。ローカル環境に入る。
- PHP: $COMPOSER_HOME/composer.json を設定してから
composer global require user_name/project_name:dev-master
を実行する。コマンドライン引数で GitHub 等を直接設定する方法はないみたい。 - Ruby: specific_install という gem を使えば
gem specific_install -l git://github.com/user_name/project_name.git
でインストールができるらしい。そうでなければ次のようにしなければならない。git clone https://github.com/user_name/rbmto.git rbmto cd rbmto gem build rbmto.gemspec sudo gem install rbmto
- Perl:
cpanm git://github.com/user_name/plmto.git -l ~/perl5
で良い。 - CSharp: nuget.org の他にいくつかあるようだけれども、git の状態での配布はできないみたい。
表
言語 | パッケージング支援 | テスティング支援 | GitHub等からのインストール |
---|---|---|---|
Elixir | mix new proj |
mix test |
mix escript.install github U/P |
Ruby | bundle gem proj |
rake test |
gem specific_install -l git://github.com/U/P.git |
Perl | minil new proj |
minil test |
cpanm git://github.com/U/P.git -l ~/perl5 |
NodeJS | npm init で package.json を生成 |
npm test |
npm install -g github:U/P |
Python | setup.pyを自分で書く | python3 setup.py test |
pip3 install git+https://github.com/U/P.git |
Golang | 設定ファイルはない | go test |
go get github.com/U/P |
CSharp | dotnet new console で proj.csproj 等を生成 |
dotnet test |
なし |
PHP | composer init |
phpunit |
composer global require U/P:dev-master composer.json への設定が必須 |
インストール先
言語 | コマンド | 実行バイナリ | ライブラリ | 環境変数 |
---|---|---|---|---|
Elixir | mix |
$HOME/.mix/escripts | - | - |
Golang | go get |
$HOME/go/bin | $HOME/go/src/github.com/user_name | GOPATH |
Ruby | gem |
/usr/local/bin | /usr/local/lib/ruby/gems/2.6.0/gems | - |
Ruby | GEM_HOME=~/.gem/ruby/2.6.0 gem specific_install |
$HOME/.gem/ruby/2.6.0/bin | $HOME/.gem/ruby/2.6.0 | GEM_HOME |
Perl | cpanm |
$HOME/perl5/bin | $HOME/perl5/lib | - |
NodeJS | npm -g |
/opt/node/bin | /opt/node/lib/node_modules | - |
NodeJS | npm |
CUR_DIR/node_modules/.bin | current_dir/node_modules | - |
NodeJS | npm -g --prefix=$HOME/node_modules |
$HOME/node_modules/.bin | $HOME/node_modules | - |
Python | pip3 |
/usr/local/bin | /usr/local/lib/python3.6/site-packages | - |
Python | pip3 --user |
$HOME/.local/bin | $HOME/.local/lib/python3.6/site-packages | PYTHONPATH |
Python | pip3 install git+https://github.com/user_name/project_name.git -target $HOME/pip |
$HOME/pip/bin | $HOME/pip/lib/python3.6/site-packages | PYTHONPATH |
|PHP |composer global require
|$HOME/.composer/vendor/bin|$HOME/.composer/vendor|COMPOSER_HOME|
|PHP |composer require
|CUR_DIR/vendor/bin|CUR_DIR/vendor|-|
感想
- Elixir はパッケージの作成、テスト支援が整っていて最高!
- NodeJS は packages.json がキモ。中途半端というかショボい。npm の問題か。
- Golang はプロジェクトの置き場所だけが決まっていて他は自由。テストが標準装備!
- Python は setup.py がキモ。よくわからない。わかってきた。
- PHP は支援がまるでない。自分でやらなければならない。もうネタでも使わない。
- Ruby は別途 gem (bundler, rake, specific_install) が必要。
- Perl は別途 cpanm, minilla が必要。これさえあれば意外と簡単。
- C# というか dotnet は必要なものが標準で整っている。C# の文法忘れててつらい。