sci

最果て風呂

各種言語のパッケージングとテスト

各種言語でパッケージとテストの作成を練習しています。

パッケージング(プロジェクト作成支援)

  • 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# の文法忘れててつらい。