2012年7月24日火曜日

WindowsでGit共有リポジトリをさくっと構築

プロジェクトのGitサーバをWindows機で構築する機会があったので、簡単に手順をまとめておきます。

通常はLinuxで構築することが多いと思いますが、今回はプロジェクトの制約でWindows機を使うことになりました。

ここで紹介する手順は、小規模な社内環境を想定していますので認証、セキュリティは考慮していませんが、「最小の構成でよいから手軽に構築したい」といった場面でのご参考にしていただければと思います。

  1. 環境
  2. インストール
  3. 共有リポジトリの作成
  4. 外部接続の設定
  5. 接続確認


  1. 環境

今回、構築する環境は以下のとおりです。

  • 共有GitリポジトリはWindows機上に構築
  • GitにはmsysGitを用いる
  • 共有Gitリポジトリとの接続はgitプロトコルを用いる
  • クライアント側のGit環境は構築済みとする

接続にgitプロトコルを用いることで、SSH鍵等の準備する手順を削減しています。


  2. インストール

以下のサイトからWindows用のGit「msysGit」をダウンロードします。
msysGit

以下のようなexeファイルが対象となりますので、最新版をダウンロードしてください。
Git-1.7.XX-previewXXXXXXXX.exe

※1.7.10未満のバージョンでは、日本語ファイル名が正しく扱えないとのことなので、
1.7.10以上のものを選ぶようにしてください。

ダウンロードしたexeを実行し、インストールを行います。
インストール時に聞かれる選択肢に関しては、特に悩むところはないと思います。


  3. 共有リポジトリの作成

共有リポジトリのベース作成

今後、共有リポジトリを格納していくベースとなるフォルダを決め、該当フォルダを作成します。
ここで決めたベースを後述するGitDaemonに設定しておくことで、クライアント側からのアクセス時にベース以降を指定できるので便利になります。
(ここでは、D:¥Git¥reposをベースとします。)


共有リポジトリのフォルダ作成

先ほど作成したベース配下に、共有リポジトリとなるフォルダを作成します。
(ここでは、sample.gitを共有リポジトリとなるフォルダとします。)


共有リポジトリの初期化

作成したsample.gitフォルダを右クリック->Git Bashを選択し、以下のコマンドを入力します。
sample.gitフォルダ配下に各種ファイルが生成されたことを確認します。


  4. 外部接続の設定

外部から共有リポジトリに接続するための設定を行います。

GitDaemonの起動

gitプロトコルを用いて外部からの接続を行う際に必要となるGitDaemonサービスを起動します。

GitBashから以下のコマンドを実行します。

※都度、実行するのは煩わしいので、以下のようなバッチをスタートアップに登録するのがよいと思われます。
GitHub:Gist / RunGitDaemon.bat
各定義は、お使いの環境にあわせて変更してください。

Windowsファイヤーウォールの設定

GitDaemonが通信に利用するポートであるTCP/9418を、Windowsファイヤーウォールで受信可能にします。



  5. 接続確認

クライアント側で、以下のコマンドを実行し、接続できることを確認してください。



--------------------
以上です、Windows Git 共有リポジトリ環境の構築を行う際の参考になれば幸いです。

2012年7月9日月曜日

続・振る舞いのよいAndroidアプリのために。StateSaver。

以前公開したBundleへの状態保存を自動化するBundleSaverをバージョンアップしました。
GitHub / monochromegane / BundleSaver



  1. BundleSaverから "StateSaver" へ
  2. StateSaverの使い方

  1. BundleSaverから "StateSaver" へ

前バージョンのBundleSaverの考え方、利用手順はこちらをご覧ください。
振る舞いのよいAndroidアプリのために。BundleSaver。

前バージョンでは、状態の保存先として、Bundleを対象としていました。
しかし、Bundleへ保存された状態は、アプリが生存する間しか保存されません。
アプリ終了後も状態を利用するには、何らかの手段を用いて永続化する必要があります。

今回、BundleSaverは「状態保存」の責務を果たすため、状態の永続化もサポートするように機能拡張を行いました。
また、それに伴い、プロダクト名をBundleSaverから "StateSaver" へ変更します。

なお、永続化の手法としては、Preferenceを採用しました。


  2. StateSaverの使い方

BundleSaverからStateSaverになるに伴い、利用するメソッドやアノテーションが変更になっていますが、基本的な利用手順は今までと同様です。
(念のため旧メソッド関連も非推奨メソッドとして残しています。)

変数の宣言時に、アノテーションで状態保存の対象であることを記載してください。
このとき、保存先がBundleかPreferenceかで指定するアノテーションを切り替えます。
なお、両方に保存したい場合、アノテーションを2つとも指定すればよいです。




対象となる型は、Bundle、Preferenceに格納できるもの + αです。
プリミティブ型、ラッパーオブジェクト、Bundle, Parcelable, Serializable などが格納できます。
詳しくはGitHub上のREADMEをご覧ください。


対象となるインスタンス変数にアノテーションをつけるだけで、保存/復元処理はStateSaverを呼ぶだけなので、使いやすくなるんじゃないかと思います。
また永続化対応によって簡易な設定等の保存/復元にも対応したので、実装がシンプルになるメリットもあると思います。

状態の保存/復元は地味ですが、ユーザ側にとって振る舞いのよいアプリケーションをつくるのに重要な処理なので、ぜひ使ってみてください。

-------------------------
ここはこうした方がよいよとかご指摘ありましたら、教えてもらえれば幸いです。
GitHubのPullRequestもお待ちしております。

ではでは。

2012年7月6日金曜日

SwimmyStudy #8 Jenkins実践入門 vol.2 に行ってきました

7/4(水)にSwimmyStudy #8 Jenkins実践入門 vol.2 に行ってきました。
SwimmyStudy #8 Jenkins実践入門 vol.2


書籍「Jenkins実践入門 ~ ビルド・テスト・デプロイを自動化する技術」をもとにした勉強会ですが、今回から初級と、初中級を分けて勉強会を進めることとなったとのことで、それぞれのグループで今後どのように進めていくかを打ち合わせることがメインの会となりました。

内容について、まとめておきます。

  1. 会の概要
  2. Jenkinsデモ
  3. 各グループの今後の方針
  4. 宣伝
  5. 所感

  1. 会の概要

参加者の構成

もともとSwimmyStudyが、「悩めるウェブプログラマーのためのワークショップ」とのことなので、PHPerが多かったです。
Jenkinsという切り口のため、自分のような他分野のメンバが入るかたちになりましたが、快く受け入れてくれてとてもステキな会だなあと思いました。


取り組み内容

Jenkins実践入門ということで、書籍「Jenkins実践入門」をもとにハンズオン形式で環境構築をみんなでやっていく会です。
ただし、今回から一部経験者に関しては、グループを分けて進めることになりました。(同じ日、同じ場所でやります)
各グループの進め方については後述します。


タイムスケジュール

今回のタイムスケジュールは以下のとおりでした。
  • 19:30 – 20:30     RackhubでCakePHPのプロジェクトをJenkinsで動かしてみるデモ
  • 20:30 – 22:00     グループ別勉強会(今後の方向性打ち合わせ)


  2. Jenkinsデモ

@ootatterさんによるRackhubでCakePHPのプロジェクトをJenkinsで動かしてみるデモ。

残念ながら、回線トラブルでRackhubにつながらず…。
ローカル環境でCakePHPのプロジェクトをJenkinsで動かしながら、各参加者からの質問に答えながら進みました。
プロジェクトがPHPでもAndorid/Javaのときと同じような構成で組めることがわかってJenkinsプラグインの豊富さに感心しました。

質疑応答の時間では、主にプロジェクトのテスト技法についてと、Jenkinsをどう使っていくのが有用なのかについて議論しました。
また、この議論内容を発展させて、各グループにて今後の方針を決めていくかたちになりました。


  3. 各グループの今後の方向性

初級グループ

ウェブプログラマーの方々が中心となって、Jenkinsの使い方を習得していくグループです。
開発手法、テスト手法、PHP動向について熱く議論を交わされていたのが印象的でした。

以下、今後の方針についてです。

  • PHPerの方が中心となって、従来どおり書籍を参考に環境を構築していく。
  • 書籍がJavaプロジェクトをもとに記載されている部分をPHPプロジェクトで進めることとする。
  • PHPプロジェクトでは、フレームワークとしてFuelPHPを利用することで最新技術習得もあわせて行っていきたい。
  • 随時、下記グループと連携を取り、手法の向上を行っていく。


初中級グループ

自分は、Androidのテスト自動化を行う際にJenkinsも合わせて利用していたのでこちらのグループに参加させてもらいました。

以下、今後の方針についてです。

  • Jenkins経験者が中心となって、Jenkinsとバージョン管理、バグ管理のシステムと組み合わせた効果的な開発環境とルールづくりを模索していく。
  • バージョン管理には、Gitとgit-flow、バグ管理にはRedmineを想定しており、複数人の開発者と管理者による疑似プロジェクトとして上記環境構築とルールづくりを検討することとする。
  • なお、プロジェクト資産は、前述のデモで利用したCakePHPによるブログシステムを利用する。

以下、次回の方針についてです。

  • 次回は、共有バージョン管理システムとJenkinsの連携部分の構築を行う。
  • 各メンバは、事前にGit、Jenkins環境とCakePHPの動作環境まで整えておくことが望ましい。

次回、自分からgit-flowについてのLTを最初に行います。
初級グループのかたも興味があれば聞いてあげてください。

ちなみにグループ名は、Jenkins Flow (仮) 、略してJFKです。
かっこいい!


  4. 宣伝

7/29(日)Jenkins ユーザ・カンファレンス 2012 東京

東京にて開催。
1300人!会場で、XFDについてのセッション内で、今回勉強会参加の@gokingさんがXFDについて講演するとのこと。


7/31(火)Jenkinsの生みの親、川口耕介さんによる福岡イベント

上記ユーザカンファレンスにあわせて全国行脚するとのことで、福岡では、きしださんと
勉強会チックなものを開催する予定みたいです。
内容はまだ決まってないとのこと、別途アナウンスがあると思います。


7/20(金)Fukuoka.php

今回の勉強会を主催されている、@mawatarinさんが最近イチオシのFuelPHPの紹介があるとのことです。
なお、日程は現時点での仮日程とのことなので、別途ATND等をご参照ください。


  5. 所感

PHPerではない自分が参加していたので、進め方について色々@mawatarinさんには配慮していただいて申し訳なかったかなと思ってますが、Jenkinsの経験があるという部分でJFKチームで色々つっこんだ議論を進めて、会にフィードバックしていければなと思います。

JFKは、普段のプロジェクトでは時間の都合上できないような試行錯誤を繰り返していけるよい機会になりそうでいまから楽しみです。

次回は、8/8(水)です。うーん、待ちきれないかも。



2012年7月4日水曜日

Android Night in Fukuoka vol.27 に行ってきました

7/2(月)にAndroid Night in Fukuoka vol.27 に行ってきました。
Android Night in Fukuoka vol.27

前日のAndroid Hackathon の疲れも癒えきらぬままのNight参加となりました。
参加者、LTもいつもよりは少なかったですが、一応まとめておきます。
  1. LT
  2. 宣伝
  3. 所感

  1. LT

今回のLTは自分と支部長がそれぞれ行いました。
両者ともに前日のHackathonが効いて資料が多少ライトな感じとなってしまいました。

@monochromegane

自分からは、ブログエントリをもとに以下の二本をLTさせてもらいました。
ショートカットキーで開発効率化(Mac/Eclipse)
AndroidのSparseArrayは本当に速いのか測定してみた

とくにショートカット入門は、自分向けのまとめでもありますが、今後の福岡支部初級コース勉強会で使ってもらえればと思います。


@yuutoさん

支部長からは、Androidで使える軽量O/Rマッパの紹介LTがありました。

軽量O/Rマッパ - OrmLite
軽量、複雑さの回避、オーバーヘッドが少なくAndroidでも使用可能とのこと

JOINも可能なはず。
サイズは150kb以下なので、アプリへの組み込みも気にならないレベル。

このライブラリはなかなかよさそうなので、今度使ってみたいと思います。


  2. 宣伝

今回は、以下の勉強会について宣伝がありました。

  • 7/7(土)やさしいAndroid勉強会 vol.1 in しぶちょー宅
  • 7/8(日)Google I/O 報告会
  • 7/16(月)輪講する会(Andorid高速化プログラミングの輪講開始)


  3. 所感

固定の顔ぶれも多いですが、毎回、大学生や、海外の方など新しい方も参加しています。
色んな人に知り合えるので、情報交換、収集の場にちょうど良い会だなあと毎回思っています。
色々ネットワークを広げていきたいですね。
いわゆるブロガー名刺をつくりたい今日この頃です。


-----------------------------
次回、Android Night in Fukuoka vol.28 は、8/6(月)です。
興味湧いた方は、お気軽にどうぞ!

ではでは。

Android Hackathon in Fukuoka に参加してきました

7/1(日)に開催されたAndroid Hackathon in Fukuoka に参加してきました。
Android Hackathon in Fukuoka

会の内容を簡単にまとめておこうと思います。
  1. 今回のHackathon概要
  2. 参加者のアプリ紹介
  3. 所感
  4. 反省等

  1. 今回のHackathon概要

今回の参加者は10名程度で、ほぼ個人ごとにアプリを開発、自分と支部長(@yuutoさん)だけがチーム開発という体制になりました。

タイムスケジュールは以下のとおりで、丸一日使っての開発となりました。
(ただし参加者の半分ぐらいは午後から参加でした)

時間内容
10:00~11:00自己紹介・テーマ決め
11:00~19:00もくもくコーディング
19:00~20:00お披露目

また、今回はテーマを特に設けず個々でアプリを決めるかたちを取りましたが、個々が得意分野を進めることとなったので、アプリ、ウィジェット、フィジカル、ゲーム、お下品etc... と何でもありのHackathonになりました。


  2. 参加者のアプリ紹介

各参加者が作成したアプリを簡単に紹介しておきます。


@daichan4649さん

ウィジェットアプリ
直近の予定まであと何日か通知するカレンダーウィジェット
ローカルのカレンダー情報をContentResolver経由で取得して、ウィジェットに表示


@eryngii_moriさん

HTML5で画像を取得、WebSocket経由で画像をアップロードするアプリ


@treby006さん

Android BEAM するアプリ
NDEFデータのやりとりを行う


@juju_suuさん

フルカラーLEDで動画再生
動画をBitmapとmp3に事前に展開して、ImageView内で画像切替


@himitusentai_haさん

九州電力でんき予報
計画停電が始まったときを知るアプリ
九州電力HPからCSVを取得して、電気利用率をグラフで表示
グラフにはachartengineを使用


@sabasabamanさん

Arduinoと電力センサーの連携
クラウド経由で電力測定を試す


@shikajiroさん

ゆっくりと会話できるアプリ
aquestalkによる音声の発信
会話は、SpeechRecognizerで音声認識

着信の電話番号をもとに名前を検索、表示するアプリ
ホットペッパーのAPIから店の名前を取得

(@shikajiroさんに書けーと言われたので追記)
ちなみにこのアプリ、匿名インナークラス連打でインデントをあえて劇深にされてました。
こういう状態を覇王翔吼拳というそうです。ほほう。
 

クロキリユさん

書籍を参考に横スクロールアクションアプリを作成。
時間切れにて画面出せず…


チームうんこ(@yuutoさん、@monochromegane)

マキグソシミュレータ
支部長のアプリ解説を転載します。
今回はマキグソシミュレータを作った。スタートボタンを押すとカウントダウンが始まるのでその間にズボンにケツポケットにスマフォを入れてスタンバイ。スタートと同時にきれいにマキグソを巻けるようにケツを回転させ、加速度センサ等からきれいに巻けたかどうかを判定し、結果を出すアプリ。

いやんお下品。


気になる投票結果は...

  • @shikajiroさん 4票
  • @juju_suuさん        3票
  • @treby006さん 1票
  • @himitusentai_haさん    1票
  • チームうんこ            1票

  3. 所感

福岡支部の特徴なのか、フィジカル系アプリの割合が多く、最後のお披露目はかなり盛り上がったと思います。
個人的にはペアプロを通して色々得るものがあり、スキル向上の面でも参加してよかった会でした。
今後も、ドMな会をやりたいというステキなメンバ達なのでいろいろ挑戦していきたいと思います。楽しかった!


  4. 反省等

みんな、うんこ言い過ぎ

2012年7月2日月曜日

ショートカットキーで開発効率化(Mac/Eclipse)

先日、参加したAndroid Hackathon in Fukuoka でペアプロを行いました。
普段の自身で作業する中ではあまり気にならない各種操作で意外と時間がかかっていることを感じ、ショートカットまわりのまとめを行うことにしました。

なお、今回はMac、Eclipseを対象としました。

今日の目次はこんな感じです。
  1. Macキー配列のおさらい
  2. 事前準備
  3. Macショートカットキー
  4. Mac Eclipseショートカットキー

  1. Macキー配列のおさらい

MacのJISキーボードは以下のような配置となっています。












以下のボタンはよく利用するので、ボタン名とボタンを表す記号の組み合わせは覚えておくとよいでしょう。

Mac特殊キー
記号 ボタン
Controlボタン
Shiftボタン
Optionボタン
Commandボタン


  2. 事前準備

各種ショートカットを利用する前に、以下の設定を行います。

Control + Space

Eclipseの入力補完とMacOSが標準で持つ検索ユーティリティSpotlightを呼び出すショートカットが重複するので機能をOffにするか、ショートカットの割当を変更します。

システム環境設定 > Spotlight

画面下の「Spotlightメニューのキーボードショートカット」チェックを外すか、別のショートカットを割り当てます。









ファンクションキー

EclipseでF3等のファンクションキーを利用した機能がありますが、Mac標準のキーボード操作では、F3相当の機能を利用するためには、fnキーを押しながらF3等を押下しなければなりません。
これは操作の手間が増えるため、fnキーを押さなくてもファンクションキーとして利用できるように設定を変更します。

システム環境設定 > キーボード

 画面真ん中のチェックボックス「F1、F2などのすべてのキーを標準のファンクションキーとして使用」にチェックを入れてください。









 以上で、事前準備が完了です。


  3. Macショートカットキー

Windowsで利用する標準的なショートカット(コピー、ペースト、保存、全選択等)は、WindowsのCtrlキーをCommandキーに読み替えることでほぼそのまま利用可能です。

ここでは、その他、知っておくと便利なショートカットをまとめます。

Macショートカットキー
オススメ 操作 ショートカットキー 備考
バックスペースfn + deleteショートカットではありませんが…
エスケープ文字Option + ¥ショートカットではありませんが…

行の先頭へ移動Command + ←

行の末尾へ移動Command + →

ページアップfn + ↑

ページダウンfn + ↓


  4. Mac Eclipseショートカットキー

ここでは、Mac Eclipseを利用する際に、知っておくと便利なショートカットをカテゴリごとにまとめます。

編集系ショートカットキー
オススメ 操作 ショートカットキー 備考
コメント追加削除Command + /
Command + Shift + C
複数行のコメントアウト操作

行削除Command + Dカーソルのある行を削除
JavaDocコメント生成Command + Option + J カーソル位置のメンバに
対するJavaDocコメント
の挿入
現在行の移動Option + ↑
Option + ↓
カーソルのある行を上下
に移動
現在行のコピーCommand + Option + ↑
Command + Option + ↓
カーソルのある行を上下
にコピー

コード補完系ショートカットキー
オススメ 操作 ショートカットキー 備考
コード補完Control + Space コード補完。必須。

インポート編成Command + Shift + O 必要なimport文の追加と
不要なimport文の削除
クイックフィックスCommand + 1 警告、エラー箇所で実行。
修正候補を選択して修正。
クイックアシストCommand + 2右辺のみ記載して実行。
Lキーにて左辺補完。

リファクタ系ショートカットキー
オススメ 操作 ショートカットキー 備考
名前の変更Command + Option + R 変数/メソッド/クラス名変更。
参照先も置換可能。

リファクタメニューCommand + Option + T クイックリファクタ
メニューの呼び出し

ソースメニューCommand + Option + S クイックソース
メニューの呼び出し

検索/移動系ショートカットキー
オススメ 操作 ショートカットキー 備考
宣言を開くF3カーソル位置の定義箇所へ
移動

呼び出し階層の表示Control + Option + H カーソル位置の利用箇所の
表示と移動

クイック
アウトライン
Command + O クラス内の変数/メソッド
一覧の表示と移動

最終編集位置Control + Q最終編集位置へ移動


タブ移動Control + fn + ↑
Control + fn + ↓
開いているタブの切替


パースペクティブ
移動
Command + F8開いているパースペクティブ
の切替
型を開くCommand + Shift + T  クラス、インターフェース
のインクリメンタル検索

リソースを開くCommand + Shift + R リソースファイル
のインクリメンタル検索

エラー箇所へ移動Command + .
Command + Shift + .
エラー箇所へ移動(下へ)
エラー箇所へ移動(上へ)

変数利用箇所へ移動Command + K
Command + Shift + K
変数利用箇所へ移動(下へ)
変数利用箇所へ移動(上へ)

実行/デバッグ系ショートカットキー
オススメ 操作 ショートカットキー 備考
実行Command + Shift + F11  前回の構成でプロジェクト
を実行
デバッグ実行Command + F11 前回の構成でプロジェクト
をデバッグ実行
ステップオーバーF6デバッグ時のステップ
オーバー操作。
ステップインF5デバッグ時のステップイン
操作
再開F8デバッグ時の処理再開操作



---------------------------------

以上、Macショートカットキーで開発効率化でした。
上記以外にもオススメのショートカットがありましたら教えてください。