:::: MENU ::::

C.a.T!

CATch a TAIL!

Japanese sub culture and tech.

  • 1月 27 / 2011
  • 0
java

プライベートなMavenリポジトリを立てる

Mavenは、複数のリポジトリから依存ライブラリをかき集めてBuildすることができますが、もちろん自身が開発した物件をプロジェクト内だけで使うプライベートなMavenリポジトリでホストしてプロジェクトチーム内で共有することができます。

リビジョン管理とこのようなリリースBuildのコントロールによって、テストなどのレポート、解析を効率よく進めることができます。

立てる方法もやってみるとすごく簡単。

  • 必要なもの
    • Maven
    • scp でファイルを受けとってくれるサーバ (ftpとかでもいい)
    • Nexus か HTTPサーバ

1. リポジトリとなるサーバを立てる

まずリポジトリサーバを立てます。

今回は、クライアントからリリース物件の転送を scp を使う方法で作ってみるので、Linuxで立てるのが楽です。

まず、リポジトリのメンテナンスユーザを作ります。

自分は、プロジェクト名のユーザを大体作ります。

# sudo useradd necomimi

次に、scp をするためにリポジトリとなるディレクトリを作成します。

necomimi# mkdir /project/maven

次に、Nexus を上げます。

Nexus は、Mavenリポジトリのプロキシとしての役割りを果たしてくれて、外部のMavenリポジトリをキャッシュしてくれたりするのですごく便利です。

今回のテーマであるプライベートリポジトリを立てるのに必須ではないのだけど、Mavenをがっつり使うのであればマストと言っていいツールです。

Nexus と Hudson は、マスト。

といっても、これは Nexus の war を Tomcat などの JEE サーバに配備するだけなので割愛。

今使ってるプロジェクトでは、Jetty で運用しています。

Nexus を立てて基本的な設定が済んだら、リポジトリの Add で Hosted Repository を追加します。

この辺の画面見てください。

これは、自前のプライベートリポジトリを立てる機能です。

いくつか設定がありますが、ほとんどデフォルトでよくて、IDやNameは適当なものを入れて、Override Local Storage Location のところに上で作ったリポジトリ用のディレクトリを入力します。

上の例だと、/project/maven

これで保存したら終了。

2. クライアントを設定する

リリース作業を行なうクライアントの設定をします。

リリース作業は、各開発者よりはリリースを管理するリリース担当者がやるので、その人の端末の設定になります。

まずは、Mavenの設定にリポジトリサーバの認証情報などを設定します。

いろいろやりかたはあるのですが、今回はssh-keyベースの認証で scp するようにします。

まず、ssh-keyを作ります。

既に作成済なら、それを使えばよいです。

someone# ssh-keygen

これで、~/.ssh に id_dsa (秘密鍵), id_dsa.pub (公開鍵)ができるので、id_dsa.pub の内容を1で作ったリポジトリサーバのリポジトリのメンテナンスユーザのホームの .ssh/authorized_keys に追記します。

上の例だったら necomimi ユーザのファイルです。

なければ作成してください。

これは、パーミッションを600 にして勝手に書き替えられないようにしておいてください。

次は、Mavenの設定にリポジトリサーバの情報を設定します。

以下のように設定ファイルを書きます。

  • ~/.m2/settings.xml
<servers>
...
<server>
<id>necomimi-repository</id>
<username>necomimi</username>
<privateKey>/home/someone/.ssh/id_dsa</privateKey>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration>
<sshExecutable>/usr/bin/ssh</sshExecutable>
<scpExecutable>/usr/bin/scp</scpExecutable>
<sshArgs></sshArgs>
</configuration>
</server>
</servers>

これでクライアントの設定は完了。

3. プロジェクトのpom.xmlの設定

最後に、リリース対象となるプロジェクトのpom.xmlを設定します。

設定すべきことは、リポジトリサーバの指定と、scp を実行してくれる拡張機能の設定です。

拡張機能には ftp などもあるので、サーバの環境に合わせて変更してください。

ここでは、詳しくは書きません。

  • pom.xml
<project>
...
<distributionManagement>
<repository>
<id>necomimi-repository</id>
<url>scpexe://example.com/project/maven</url>
</repository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-beta-6</version>
</extension>
</extensions>
</build>
..
</project>

これで設定は完了。

リリース作業は、

someone# mvn deploy

だけです。

これで、リポジトリサーバの /project/maven 以下に、Mavenリポジトリにおなじみのディレクトリ構成とリリース物件である jar や チェックサムファイルなどが配備されているはずです。

これを、Nexus の Hosted Repository 経由で参照できるので、プライベートなMavenリポジトリとして利用できます。

Nexus を使わないのであれば、ApacheHTTPなどを立てて、リポジトリディレクトリを公開するだけでもOKです。

この辺、大した時間かからないけど、方法を調べたりしてると意外に面倒でなかなか実行しないことが多いので、まとめてみました。

  • 1月 26 / 2011
  • 0
engineer

git のマージツールを設定する

会社で導入したら、周りの人間に使い方理解できないとか、意味不明なことを言われている git ですが、マージツールとかを使いやすいものに替えるだけでも障壁を下げれるのかと思いその辺の設定をまとめておきます。

マージツールのオススメは、マルチプラットフォームで動く Perforce Visual Merge and Diff Tools (p4merge) です。

こいつを git のマージツールとして設定します。

Mac前提でまとめますが、他の環境でも同じなので多分問題ないです。

まず、p4merge をインストール。

Macなので /Application にドロップするだけ。

次に、以下のようなシェルを書きパスが通ったディレクトリに保存して実行権を付けておきます。

Linuxとかなら P4MERGE 変数をインストールした p4merge コマンドに書き替えるだけ。

  • p4merge
#!/bin/sh
P4MERGE=/Applications/p4merge.app/Contents/MacOS/p4merge
${P4MERGE} $*
  • p4diff
#!/bin/sh
P4MERGE=/Applications/p4merge.app/Contents/MacOS/p4merge
[ $# -eq 7 ] && ${P4MERGE} "$2" "$5"

次に、git のグローバルコンフィグに以下のエントリを足して、git mergetool で使うツールとして p4merge を指定します。

  • ~/.gitconfig
[merge]
keepBackup = false;
tool = p4merge
[mergetool "p4merge"]
cmd = p4merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
keepTemporaries = false
trustExitCode = false
keepBackup = false
[diff]
external = p4diff

これで、git mergetool でグラフィカルにサクサクマージしましょう。

  • 1月 17 / 2011
  • 0
engineer

Squidで中間Proxyを立てる

実験環境なんかで、プライベートなネットワーク組むことがよくあるのですが、その際外部ネットワークに HTTP だけは通したいことがよくあります。

OSのパッケージインストールとか、Mavenビルドとかね。

そういうときには Proxy を立てますが、いっつも忘れるのでメモ。

構成的には、プライベートネットワーク内のマシンは、ここで立てるProxyサーバを通して社内ネットワークに接続。

社内ネットワークには、インターネットに出るための社内Proxyサーバが別途立っていて、そこを通らないと Firewall が越えられない前提。

さらに、社内ネットワークのマシン群には、社内Proxyを通さずにHTTPする必要がある。

微妙に、特殊かもしれませんが。

使うのは定番のSquidです。

Ubuntu だと、

# sudo apt-get install squid

で、/etc/squid/squid.conf を以下のように。

#1

http_access allow CONNECT SSL_ports

#2

cache_peer parent.proxy-server parent 3128 7 no-query

#3

acl local-servers dstdomain my.internal.domain

always_direct allow local-servers

#4

never_direct allow CONNECT

#5

forwarded_for off

#1 で SSLポート(デフォルトで定義がある)への接続を許可。

#2 で 社内Proxy(parent.proxy-server)を親Proxyとして設定。これで、外へのアクセスは、社内Proxyへパス。

#3 で 社内ネットワーク(my.internal.domain) へのアクセスは社内Proxyにパスせず直接接続。

#4 で 社外ネットワークに接続する場合のSSL接続は、社内Proxyへパス(SSLはデフォルトで直接接続しようとする)

#5 で 一応IP隠す。

という感じ。

設定は、順番で動作が変わるのでその辺はまることがある。

  • 1月 13 / 2011
  • 0
misc

スーパーやよいおりうさちゃんタイム

f:id:clover-leaf:20110113213325p:image:w250

MacBook Air 11インチ欲しい!

欲しいんだけど はてなダイアリ は、Android 端末でサクっと書いちゃうので、Androidアプリ書くのに使います。

どうせなら、はてなもお外で書こうとかいうコンセプトで iPad とか NexusS とかプレゼントした方がおもしろいと思うけどなあ。

こないだ買った 003sh GALAPAGOS ですが、予想どおり付属ランチャとかは置換して上のような状態に。

アイマス2発売直前うさぎ年なので、やよいおりうさちゃん壁紙から変えられません。

使用感は、概ね満足しています。

edyとかSuicaが使えるようになったらもっと満足できそう。

  • 1月 10 / 2011
  • 0
misc

今週英語blogに書いたトピック

せっかくなので、英語blogに書いたトピックも週ごとにまとめていこう。

英語側の blog は、YET ANOTHER Catch a TAIL! と言います。

今回は初めてなので、先週までに英語側に書いたもの全部。

余っているMacでAppleTVっぽくメディアサーバを作ってるのですが、そこで使ったPlexのミニhack。

Plexすごくいいよ。

2010年よかったCDアルバム。

ソラノヲトは、マジよいです。

opoona のサントラレビュー。

崎元、岩田コンビらしい曲が多くて、昔からのファンにはすごいオススメ

  • 1月 10 / 2011
  • 0
android

Android Bazaar and Conference 2011 Winter に行ってきた

f:id:clover-leaf:20110109115322j:image:w250

ここのところ、技術コミュニティ系のイベント行けていなかったので、今年はもっと参加しようということで、手始めに Android コミュニティのイベント ABC2011W に行ってきました。

寝坊したので、昼からになりましたが。

Bazaar の雰囲気がまんまコミケのようなノリで、なかなか楽しい空間になっていました。

人多すぎなのもそのままなのはちょっとぐったりでしたけど。

聞いたセッションのオーバビューです。

  • 日経BP社 Android Application Award 2010-11 Winterの傾向と対策

聞くつもりではなかったのですが、次のセッション待ちで教室に居たら始まったので。w

Androidアプリコンテストの開催通知でした。

昨年の入賞者を見ると企業作品が大半だったので、完成度重視な感じでした。

今回には間にあいそうにないけど、半年ペースぐらいで開催するようでしたので、次回あたり出してみたいですね。

  • サイバーエージェント Ameba for Android ~来るべきスマートフォン時代へのデバイス対応~

Android、モバイルの拡大状況を示すデータをいろいろ出してました。

スマホが急拡大していることは、もう疑いようがなく、その勢いは予想以上。

Androidは、まだ市場が形成されていないから、爆発する余地がまだまだある。

全くそのとおりと思っているので、自分も最近はAndroidにリソースを絞ってます。

問題は、やっぱりマーケットを放逐している Google なんだよなあ。

アプリを探して、アップデートなどのメンテするのに、マーケット毎にアプリ起動して、とかユーザ体験的にありえないよ。

Google は、自前マーケット今後もやる気ないのであれば、せめてアカウント管理と同様のマーケットの集中管理の仕組みを用意すべき。

  • DeNA ngCore engine for mobage platform

DeNAのモバイル戦略的な話が大半で、後半 ngCore の話。

ngCore は友達から聞いてちょっと知ろうと思っていたんですが、今回の講演ではあまり技術的な話はなくちょっとガッカリ。

今後の改善点とか、機能追加の話が多かったかな。

ソーシャル系 API は、Open Social ベース。

JavaScript で書くというのがちょっとおもしろいなあ。

テストサーバも node.js だし、既存の JS フレームワークも使える。

マルチというのはしばらくモバイルやるうえで無視できないので、ちょっと調べてみようと思います。

  • 白石俊平 HTML5によるリッチクライアント開発手法についてあれこれ

すごい人でした。

Android とあまり関係ないけど、ホットですからね。

内容は、HTML5オーバービューという感じで、浅く広くという感じでした。

かなり大規模なWebアプリも書かれたそうなので、その辺のノウハウをもう少し聞きたかったです。

モジュラリティの欠如などを問題に上げられていましたが、CommonJSなどいくつかのソリューションも出てきてるので、HTML5の普及とともに今後急速に利便性が上がりそうです。

ECMAScriptは、仕様戦争を早い段階で整理して、すごくいい方向に向かっていますね。

HTML5も、一度全体を最低限理解する時間作らないとな。

  • はてな Android・ウェブアプリケーション連携術

はてなの Android アプリ開発の中でのノウハウなど。

Intentシステムなどを見たときに受けた印象が、明らかに Web のアナロジだよねーだったけど、やっぱり cho45 さんもそう感じていたようで。

アプリ間でマッシュアップとかできるからね。

このシステムは、まだまだ進化させられると思ってるので、いろいろ hack してみたいところ。

端末屋とかプラットフォーム屋が取るべきポジションも、この Intent + Service だと思ってる。

今の Web を考えれば自明だけど。

  • Android2.3(Gingerbread)のAPI解説

Gingerbread 新機能オーバビュー。

地味だけど、NFC とか StrictMode とかは、地味の面白い。

機能面では、Honeycomb に大部分持ち越しな分、地味だけど割と基盤部分の改善が多くて、きっちり押さえておくのが吉。

今回は、企業セッションが多くビジネス的な話が多かったのは、ちょっと残念だけど、それだけ市場が立ち上がってきたということで、うれしいですね。

  • 1月 05 / 2011
  • 0
misc

2011年の目標

いい年になってきたし怪社も潰れそうなので、今年はきちんと目的と目標を持って動くことにしました。

具体的に目標を立てました。

  • 英語

今の中途半端なラインから2ステップぐらいで抜け出そうかと。

とりあえず今年のTOEICは +100 点が目標。

年末にかけてちょっと大変だったので少しさぼってましたが、Skypeの英語レッスンも毎日ペースでやる。

  • 開発

2 Androidアプリ、1サービス立ち上げを目標にします。

Androidは、もう普及期に入ったので手にとってもらえるチャンスも増えたと思うのでちょっと本腰入れます。

少しマネタイズも意識したいですが、まずは自分が欲しいと思っているものにすることに集中。

サービスも自分が欲しいと思ってるもので、これはちょこっとした小さなもの予定。

最近 Python を使っているので、勉強もかねて App Engine あたりで上げようと思ってます。

  • 読書

1年で20冊を目標。

もっと読めそうな気もするけど、毎年読めていないのでこれぐらいが妥当かなと。

  • ロゴを描きなおす

ロゴデザインを久々変えようと。

あと mio design works の名刺作る。

デザインは、もう少しきちんと勉強し直そうと思っていて、読書も半数はデザイン関連の本で勉強しようかなと思ってます。

  • blogポスト週1

ポストを義務化するというより、自分が勉強したことをまとめていく作業としてblogをもっと使おうと。

ということで週に1個ぐらい書けるぐらい得るものを作っていきます。

英語blog始めたので、どっちかの記事を週1で書こう。

こんな感じで目的を持って進もう。

去年末、お知りあいにお世話になってちょっとした挑戦をして見事失敗したのですが、それをしたことでいろいろふっきれたというか、社会人になった直後の気持ちをとり戻したというか。

なので数値じゃないけど、「自重しない」という目標もあったりします。

怪社で組織を異動したとき、なんかキャラクタを変えて自重するようになってしまった。w

それは結果的にはあまりいいことがなかったと思えるので、昔のキャラに戻ろうかと。

あとは死なないことだな。

最近、なんか体ガタついてるんで。