Carton でモジュールをインストールしようとした話
まだ書きかけでした.
モジュールをインストールしようとした
carton 環境を作った
やること
- plenv のインストール = ~/.plenv 配下
動機
モジュールをインストールしたい. できるだけインストール先がわかりやすく, 指定も楽な方がよい.
最近のことがわからない.
- Windows でも実施する
- Strawberry Perl だと cpanm までは入っている
- plenv を使おう
- System でもいいけど,root じゃない人も居るし,環境を隔離したい(~/.plenv 削除すれば全部消えるとか)
- rbenv を使ってたりするし.こっちでいいか.
- install-cpanm サブコマンドがある.
- 普通にインストールしてる
- cpanm / perl-carton なんすかね?
- cpanm 単体でやろうとしたけど,@INC の指定がよくわからなかった
- perl-carton なら簡単なんすかね
- carton exec でやるのもいい.
- できるだけローカルディレクトリで済ませたかった.(インストール先が理解しやすいと良い)
- vendor/bin/carton で済むなら,それがいい.→ deployment の機能?
- ./cpanm はできる.
- fatpack がわかってない.これかな? Carton::Doc::Fatpack - Fatpack carton executable into vendor/bin - metacpan.org
- carton fatpack は,vendor/bin/carton を作る.deployment 用
- carton はglobal に入れるのが普通なんすかね
- Carmel - CPAN Artifact Repository Manager - metacpan.org の方がいいんすかね? まだ EXPERIMENTAL ですね.
install-cpanm 補足
$ tail -2 ~/.plenv/libexec/plenv-install-cpanm curl ${PLENV_INSTALL_CPANM} -L http://cpanmin.us/ | plenv exec perl - ExtUtils::MakeMaker App::cpanminus plenv rehash
インストール
plenv のインストールは簡単です
コピペだけしとくと
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv $ git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/
.bashrc や .zshrc に以下を追加
export PATH="$HOME/.plenv/bin:$PATH" eval "$(plenv init -)"
で,Perl をインストールして使えるようにする.と
$ source ~/.zshrc $ plenv install -l|tail -1 5.23.9 $ plenv install 5.23.9 $ plenv global 5.23.9 $ perl -V|head -1 Summary of my perl5 (revision 5 version 23 subversion 9) configuration:
cpanm を使う
$ plenv install-cpanm $ where cpanm <HOME>/.plenv/shims/cpanm $ rehash $ cpanm -V|head -1 cpanm (App::cpanminus) version 1.7040 (<HOME>/.plenv/versions/5.23.9/bin/cpanm)
perl-carton を使う
$ cpanm Carton $ rehash $ where carton <HOME>/.plenv/shims/carton $ carton -v carton v1.0.22
モジュールをインストールする
$ edit cpanfile $ cat cpanfile requires 'HTTP::Server::Simple' $ carton // インストールされる
動作確認
$ carton exec ./a.pl // HTTP::Server::Simple を使ったもので. @INC 指定していない $ cat a.pl #!/usr/bin/env perl use strict; use warnings; use utf8; { package A; use strict; use warnings; use utf8; use base qw(HTTP::Server::Simple::CGI); sub handle_request { my ($self, $cgi) = @_; my $a = $cgi->param('a') || 'none'; print "Hello World ", $a; } 1; } my $server = A->new(); $server->run();
LINK
- GitHub - tokuhirom/plenv: Perl binary manager - plenv
- GitHub - tokuhirom/Perl-Build - perl-build
- GitHub - miyagawa/cpanminus: cpanminus - get, unpack, build and install modules from CPAN - cpanm
- GitHub - perl-carton/carton: Bundler or pip freeze for Perl - carton
- Tatsuhiko Miyagawa's blog — miyagawa/cpan-module-bootstrap - deployment carton bootstrap 的な話
- 1.3 Cartonによるアプリケーションの実行環境の構築 : Practical Modern Perl (仮) - モダンっぽい記事
- Perlはもう古い、これからはDocker - ゆううきブログ - Dockerfile で carton インストールまで.かなり削られていて読み易い
- 作者: Randal L. Schwartz,brian d foy,Tom Phoenix,近藤嘉雪
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/07/25
- メディア: 大型本
- 購入: 7人 クリック: 22回
- この商品を含むブログ (17件) を見る
- 作者: Randal L. Schwartz,brian d foy,Tom Phoenix,伊藤直也,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/08/21
- メディア: 大型本
- この商品を含むブログ (2件) を見る
- 作者: 牧大輔
- 出版社/メーカー: 翔泳社
- 発売日: 2009/02/10
- メディア: 大型本
- 購入: 25人 クリック: 534回
- この商品を含むブログ (108件) を見る
Eclipse から JUnit を使える環境を準備する話
前の記事からのまとめです.
- Eclipse で JUnit を使おうとしたら Matchers(hamcrest-library) が無かった
- Plugin 内での解決方法がわからなかった
- Gradle を使うのもいいが,そこまで重くしたくなかった(Eclipse, Gradle をインストールするという意味で)
プロジェクトを作るまで
Eclipse をインストールする
$ brew install Caskroom/cask/eclipse-java
Gradle plugin を入れる
Eclipse を起動して
Help > Eclipse Marketplace > Search > Find: gradle > Gradle IDE Pack > Install
Gradle プロジェクトを作る
勉強のために,JUnit を書きたいだけなので,Quickstart で.
File > New > Other > Gradle / Gralde Project > Next > Project name: XXX, Sample project: Java Quickstart > Finish
Git の設定
プロジェクトを選択して…
Team > Share Project > Git > Next > Use or create repository in parent folder of project, プロジェクトを選択, Create Repository > Finish
.gitignore の設定
このままだと,.gradle ディレクトリの扱いが面倒なので,.gitignore に .gradle を足します.
以下は,.gitignore を編集する例です.
プロジェクトを選択 > Show In > Navigator > (フォルダ階層の中に .gitignore があるので編集) > "/.gradle" を追加 > 保存 Navigator パースペクティブを Close
JUnit 依存の追加
これは,tddbc のプロジェクトから取ってきています.
build.gradle
diff --git a/build.gradle b/build.gradle index c1baa9d..e733dd6 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,8 @@ repositories { dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' - testCompile group: 'junit', name: 'junit', version: '4.+' + testCompile 'junit:junit:4.+', { exclude module: 'hamcrest-core' } + testCompile 'org.hamcrest:hamcrest-all:1.3' } test {
依存の解決
プロジェクトを選択
Gradle > Refresh Dependencies プロジェクトの Gradle Dependencies に,hamcrest-all-X.Y.jar が含まれていることを確認する(hamcrest-core ではなくて)
Assist の設定
以下引用させて頂く
設定画面で、Java - Editor - Content Assist - Favorits にて以下の設定。 New Type org.hamcrest.CoreMatchers org.hamcrest.Matchers (hamcrest-library利用時) New Members org.junit.Assert.assertThat org.junit.Assert.fail
引用終わり
Java のテストの話の自分の理解
テストを書ける環境を準備したい話
あらすじ
- 自分は,Java は,全然知らない.特に最近のはわからない.
- 友だちに Java を教える話があった
- まあ学習目的だから,ユニットテストは書くだろう
- よく知らないけど JUnit かな?
- IDE とかは,Eclipse かな
- 最近のは,assertThat / Matcher を使うらしい
- assertThat / CoreMatcher.is は使えた.
- Collection の比較で,contains ってどこにあんの?
- hamcrest-library にあるらしい.
- eclipse/plugin 配下だと,hamcrest.core しかないような?
一つの目的としては,JUnit 依存をなんとかできるプロジェクトを作る方法を知りたい.
あ,あと,条件として.
- 予想だと,教える人に過去遺産とかルールがありそうだから Eclipse であることはたぶん変えない.
gradle - ビルド,依存関係
- Gradle入門 - Qiita
- GVM ってのが,rbenv 的なもの?
この記事読んだだけで,gradle でいいんじゃないかと思えてきた.XML とか書きたくないじゃないですか.
gradle と Eclipse をどうやって,一緒に使うのか?
- ビルドツールGradleをEclipseで使うための手順 - DukeLab
- Eclipse で Java EE 開発してる人が Gradle の門を叩く - なにか作る
- http://opamp.hatenablog.jp/entry/20120805/1344178962
Eclipse には,plugin があるけど,gradle eclipse を叩かないと駄目なんかな.
gradle wrapper というのがあるらしい
そういえば,そういうのが tddbc のプロジェクトに入っていた気がする.
そうか,だから,wrapper を使わない場合.のようになっていたのか.
途中まとめ
まとめというか,tddbc のプロジェクトクローンすればいいんじゃないか.
という結論に達した.
車輪を読んで自分が勉強しただけでしたね.
Eclipse - 開発環境
Eclipse 以外がいい.という理由がすぐ探せなかったので,あまり何も考えてない.
SublimeText を検討…
名古屋で行ったSublimeTextの勉強会は女性の参加者が多かった。というか半分以上女性だった。ということで、「Sublime Textはモテる」方面のプッシュをしてもいいんじゃないかと思った名古屋の夜(違うだろ)。
— Masayuki Maekawa (@maepon) March 9, 2015
bootstrap を考える
Eclipse を入れて,なんとかしたら,良い感じの状況にしたい.
確認したいこと.
ためしに,tddbc のプロジェクトをクローンしてみる.
$ cd workspace $ git clone https://github.com/tddbc/java_junit.git $ cd java_junit $ ./gradlew eclipse Eclipse > File > import > Existing Projects into Workspace
この場合,生成された .classpath を見るに,$HOME/.gradle/caches を使うようだ.
これだと,.classpath とかをコミットできず,全員が gradlew eclipse をしなければならないが,
ライブラリをダウンロードするためには,最低1回は,全員が gradlew eclipse をすると思えば,そんなに悪くない.
とはいえ,デプロイ用途だから test 用ライブラリ不要,という要件はできてもいいかな.と思うけど,
今回は本筋から外れるから考えない.
Eclipse gradle plugin
Eclipse > Help > Eclipse Marketplace gradle で検索 Gradle IDE Pack をinstall
dukelab さんの記事を参考に,新規プロジェクトを試してみる.
sample project について
Java Quickstart がシンプルなのかな.
File > New > Other > Gradle > Gradle Project > Next > Project Name(gradle_test_qs) : Sample Project(Java Quickstart) > Finish プロジェクトを選択 > Team > Share Project > Git : Next > Use or create repository in parent folder of project : そのロケーションを選択 : create repository > Finish プロジェクトを選択 > Team > Commit
試しに,build.gradle を変更してみる.
modify build.gradle プロジェクトを選択 > Gradle > Refresh All
これで,依存関係とかが変更される気がする.
あと,ディレクトリを見てみたら.こうなっていた.
あまり調べていないのだが,.gradle/, .settings/ は ignore するのかな.
$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: .gradle/2.1/taskArtifacts/cache.properties.lock modified: .gradle/2.1/taskArtifacts/fileHashes.bin modified: .gradle/2.1/taskArtifacts/fileSnapshots.bin modified: .gradle/2.1/taskArtifacts/taskArtifacts.bin modified: .settings/org.eclipse.jdt.core.prefs modified: build.gradle no changes added to commit (use "git add" and/or "git commit -a")
.gitignore に .gradle は含めても良さそう
あと,.settings は,日付が更新されていただけなので,戻しても良さそう.
すべては何になるのか
とあるドラマの感想である
- 話題的には大学の位置は元のでも良かったかもね
- それこそ予測できないから,仕方ないか.
- 真賀田博士は,痩せたメイクをしてもいいかもしれない.
- 喜多先生かっこいいは,盛り過ぎじゃね?
- ダンディとか?もう少しお若い方の配役でも良かったのでは?あんま出ない感じなんすかね?
- 犀川先生と同期とか言われると,ちょっと違和感があった.
- イマドキメールが来るから,は無いやろ.チャットとか,オンラインミーティングで良いんじゃ?
- 犀川先生のイメージは,少し一般受けな感じですね.部屋が汚かったり,表情が表に出る感じ.
- デカいディスプレイとかはあっても良かったかも.ノートである意味はあんま無いかなー.画面を写したくなかったのかな?作るの面倒だから.Python 使ってる.とかツッコミが来たりするしね.
ということで,まだ全部見てないけど.こんくらいすかね.
何になるのか.というと,本質的に萌えアニメなんだから.
犀川先生がかわいければ,何でもいいんじゃないですかね.
あ,あと,四季が預言者みたくなってますね.
そんなもんだっけか?
結婚式で思うこと
内容
結婚エントリではありません.
以下,個人の感想ですし,そもそも1組ずつしか見てないので,
一般的ではないかもしれないのをご容赦ください.
結婚式に二週間連続で行ってきたので感想を残しておこうと思う.
- 前者は,教会のタイプで,
- 後者は,神社のタイプ
だった.
教会のタイプ
新郎,新婦 に 神父 が誓約(commit) させるようなイメージがあった.
それを同席の人に確認させる.契約のイメージ.
神社のタイプ
神主(?) は,あくまでも司会 or 代弁者に近いイメージで,ちょっと話すだけ.
新郎,新婦が,誓約するけど,回りの人も,一緒に聞く.
神楽を踊ったりして,同席の人は,参加者でしかないイメージ.
まとめ
宗教の神観の違いなのかもしれないけど,
そのまま,人の価値観にも現われているのかな.という部分も考えたりした.
そんなことはどうでもいいので,御両人 x 2,お幸せに.
docker private registry を立ててみた
内容
いちいち build するのが面倒になったから,private registry を立てることを検討してみた.
とりあえず,ローカル(MacOSX + boot2docker)に立ててみる.
Mac$ docker run -p 5000:5000 registry Mac$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a7238561b9e2 registry:latest /bin/sh -c 'exec doc 22 hours ago Up 29 minutes 0.0.0.0:5000->5000/tcp silly_bell
これだけで起動する.
失敗
Mac で boot2docker を使っているので,
Mac 側 Mac$ sudo vi /etc/hosts 192.168.59.103 docker-reg.private.local Mac$ docker push docker-reg.private.local 2014/08/08 08:34:12 Error: Invalid Registry endpoint: Get http://docker-reg.private.local:5000/v1/_ping: dial tcp: lookup docker- reg.private.local: no such host
としてみたら,push できなかった.
成功
boot2docker 側 boot2docker$ sudo vi /etc/hosts 127.0.0.1 docker-reg.private.local boot2docker$ docker push docker-reg.private.local:5000/sample-app The push refers to a repository [docker-reg.private.local:5000/sample-app] (len: 1) Sending image list Pushing repository docker-reg.private.local:5000/sample-app (1 tags) (中略) Pushing tag for rev [a1eb481825d3] on {http://docker-reg.private.local:5000/v1/repositories/sample-app/tags/latest}
で設定したらできたみたい.
そりゃそうか.docker が動いてるのは boot2docker 側だから,
そっちから引けないと駄目か.
ということは,最初は localhost にしたら簡単だったかも.
あーでも,そうすると,Mac 側から見えないか.両方設定するのもアリかもしれない.
次に
もうちょっとストレージの永続化とかを考えた方がいいかもしれない.
Makefile を書く訳
何か仕事的なことを実行するときにシェルスクリプト的なものを書くときがあります.
スクリプトのサイズ(処理する機能,処理対象)によって,
シェル → スクリプティング言語 → 速いの.みたいな描き直しが発生したりしますが.
シェル → スクリプティング言語の途中に,Makefile を使うことがあります.
まあ,Makefile なんで複雑なこと書けないし,$ (ダラー)をエスケープとかしなきゃいけないけど
2つ好きなところがあります.
- ターゲットを補完できる
- 依存関係を表現できる
ターゲットを補完できる
基本Zshell 使っているので,補完したい.
仕組み作ってもいいけど.まあ簡単にやりたい.
そんな感じで,Makefile のtarget を使ってます.
依存関係を表現できる
処理する対象がある程度大きいと処理を分割しよっかなと思ったりします.
一時ファイルとか作ってやるとかです.真面目に最適化するのもいいけど.
まだそれが今後も必要な処理かどうかが,わかっていないとか.
そんなときに,適当に処理を分割して,pipe & filter の処理をわざと区切って
task に落としたりします.
target: bbb bbb: aaa $(scriptB) aaa > bbb aaa: $(scriptA) > aaa
みたいな.
オプションとか真面目に処理するなら,何か言語でやったが速いかもなー.
オプションも簡単に書けて,自動的に Zshell で補完できるのなにかないですかねー.