GitLab API (gitlab gem)を使ってみました

今年の新人研修で課題の提出場所に GitLabを使ってみました。生徒の人数分 x 課題数のリポジトリーが作られるので、課題結果を自分の環境にcloneするのを手動で行っているとたいへんです。そこで、GitLab APIを使い、簡単なツールを作ってみました。

GitLab APIには gitlab gem があり、簡単に使う事ができます。しかし、いざ自分のやりたいプログラムを書こうと思ったら・・・・

  1. APIドキュメントはあるが、内容は今ひとつ
  2. サンプルコードが少ない
  3. ネット上 (英語の情報を含め)にも情報が少ない

という事で、gitlab gem の RSpecコードなどを見ながら勉強しました。また、APIの設計があまりオブジェクト指向的でなく、最初は戸惑いました。

以下のコードは、 あるグループに所属する全員の レポジトリーの一覧を表示し、そのリポジトリをアクセスするために自分のアカウントを管理者として登録し、全リポジトリーを clone するコードです。

PRIVATE_TOKEN は管理者(root)アカウントの PRIVATE_TOKEN を指定して下さい。

#!/usr/bin/env ruby
require 'gitlab'

GUEST_LEVEL       = 10
MASTER_LEVEL      = 40
GITLAB_SERVER_URL = 'http://GITLAB_SERVER'
GITLAB_API_URL    = "#{GITLAB_SERVER_URL}/api/v3"
PRIVATE_TOKEN     = 'xxxXXXXXXXXXXxxXXXXn'
GROUP_NAME        = 'student'
MY_NAME           = 'yuumi3'


def get_group_members(gitlab_root, group_id)
  gitlab_root.group_members(group_id).select{|e| e.access_level == GUEST_LEVEL}.map(&:username)
end

def add_member_to_projects(gitlab_member, user_id)
  gitlab_member.projects.each do |project|
    unless gitlab_member.team_members(project.id).find {|m| m.id == user_id}
      gitlab_member.add_team_member(project.id, user_id, MASTER_LEVEL)
      puts " add users to #{project.path_with_namespace}"
    end
    
  end
end

def list_all_projects(gitlab_member)
  gitlab_member.projects.each do |project|
    puts "  #{project.path_with_namespace}"
  end
end

def clone_all_projects(gitlab_member)
  gitlab_member.projects.each do |project|
    unless File.exists?(project.path_with_namespace)
      cmd = "git clone git@#{GITLAB_SERVER_URL}:#{project.path_with_namespace} #{project.path_with_namespace}"
      puts "  #{cmd}"
      system cmd
    end
  end
end


gitlab_root = Gitlab.client(endpoint: GITLAB_API_URL, private_token: PRIVATE_TOKEN)
username_to_id  = Hash[*gitlab_root.users.map {|u| [u.username, u.id]}.flatten]
groupname_to_id = Hash[*gitlab_root.groups.map {|u| [u.name, u.id]}.flatten]

members = get_group_members(gitlab_root, groupname_to_id[GROUP_NAME])

# 生徒のrepository一覧
members.each do |member|
  gitlab_member = Gitlab.client(endpoint: GITLAB_API_URL, private_token: PRIVATE_TOKEN, sudo: member)
  list_all_projects(gitlab_member)
end

# 生徒のrepositoryに私を管理者として追加
members.each do |member|
  gitlab_member = Gitlab.client(endpoint: GITLAB_API_URL, private_token: PRIVATE_TOKEN, sudo: member)
  add_member_to_projects(gitlab_member, username_to_id[MY_NAME])
end

# 生徒のrepositoryをclone
members.each do |member|
  gitlab_member = Gitlab.client(endpoint: GITLAB_API_URL, private_token: PRIVATE_TOKEN, sudo: member)
  clone_all_projects(gitlab_member)
end

ActiveState Komodo Edit 日本語メニュー

Komodo Edit4.3 用 日本語 拡張モジュールが出てました → http://komodonoko.com/node/44 ありがとうございます!

日本語化されるのは、メニューやツールチップのみで、エラーメッセージやヘルプは日本語化されません。

インストル手順は、ダウンロードしたファイルを展開し出来た komodo-ja.txt に書かれています。
私の場合、インストール&再起動後 locale_switcher-2.1.xpi が有効になりませんでしたが、再度 locale_switcher-2.1.xpi をインストール&再起動したら日本語化できまました。

追記

日本語メニューの一部がエラーになってますね。

Komodo Edit で Perl/HTML を書く

Perl のお仕事で Komodo Edit を使っています。 Perl コードのチェック機能では未定変数が分かったりと文法以上の事も調べてくれるので便利です。

今日は、HTML を Komodo Edit で書いているのですが、Preview Tabを ON にすると、HTMLを保存した際に表示イメージを再表示してくれるので HTML作成作業がはかどります。 また、CSSの補完機能はCSSの属性名に明るくない私には大助かりです。

NetBeans を試してみた

screenshot

基本情報:

評価


インストール

簡単

日本語
起動時間など
  • それほど遅くない
補完機能など
  • rubyシンタクスやメソッドの補完が出来る、引数やメソッドのドキュメントが表示される
  • 文法チェックあり


その他機能
  • リファクタリング機能として名前の変更機能があり、その名前を参照している部分も変更してくれる
  • SVN等との連携機能があるが、リポジトリーブラウズ機能がないので使いにくい
  • ジェネレータ (script/generate相当) 説明あり
  • サーバー起動 (script/server相当)
  • rake の実行 アシスト機能あり
  • gem 管理
感想

IDEというと、大きい、起動遅い・・・ という印象がありますが裏切られました。 まず、インストールファイルが20Mbyte しかありません! 起動もEclipseに比べるとかなり早いです。

以前評価した時JRuby でしか実行できなかったのですが、今は普通のRuby (MRI)でも実行できます。

補完機能はかなり良いレベルまで来てますね。 初期のEclipseJavaの開発をするイメージかな? メソッド等の説明が表示されるのでですが、それが日本語になれば最高かも。
また、リファクタリング機能として名前の変更機能があり、参照している部分も変更されるのは素晴らしいですね。

日本語化もほぼ出来ていて、IDEとしての完成度がかなり高くなっています。 IDEが好きな人にはお勧めです。

TextMate を試してみた

screenshot

基本情報:

評価


インストール

簡単

日本語
  • 日本語メニュー: ×
  • ソースコードの日本語表示:△
  • 日本語入力: △

インストール直後は、日本語の表示・入力ともにダメですが、Safari Stand の作者 id:hetima さんが英語と日本語が等幅のフォントと日本語表示プラグインを公開してくれています。素晴らしい!! → http://hetima.com/textmate/index.html


プラグインのインストールは ~/Library/Application Support/TextMate/PlugIns/ にプラグインを入れるように書かれていますが、私の環境(まだ評価ライセンス)ではこのフォルダーは無かったので、/Applications/TextMate.app/Contents/PlugIns/ に入れました。

ForMateKonaVe.ttfのインストールはForMateKonaVe.ttfをダブルクリックしFont登録し、TextMateのPreferenceのFont&Colorで orMateKonaVe を選択すればOKです。

これで、下のように日本語の表示や入力が出来るようになります。


起動時間など
  • 高速!
補完機能など
  • rubyシンタクスやメソッドの補完が出来る (ESCキー)
  • 文法チェックは無し
  • しかし良く使う構文が簡単に入力出来る。例えばRailsのControllerで rea と入力すると redirect_to :action => "index" と入力されます。
  • ただし、Railsに付いては Version 1.2 対応のようです。


その他機能



感想

海外では高い評価を得ていて、Rails作成者のDHHもお薦めの Mac専用エディターでしたが、以前は日本語表示/入力共にダメで日本ではあまり使われていなかったようです。
しかし、現在は id:hetima さんの作られたフォントとプラグインのおかげでギークな日本人Rails開発者の間では使われています。


コード補完を超えた、よく使うコードのパターンを瞬時に入力できる Snippet 機能は、慣れたら 素早いコーディング力をもたらすと思います。
また、IDEにありがちな反応の遅さがなく、起動の早さは快適な開発環境を与えてくれそうです。

ただし、依然として日本語がきれいに表示出来ないので、日本語表示を気にする人には無理かもしれません。


また、メニューの構成がどうもしっくりこない、コンテキストメニューが弱いと私は思いますが、Snippet 機能や軽快さは魅力的なのでしばらく Ruby on Railsの開発には使ってみようかと思っています。

ActiveState Komodo Edit を試してみた

screenshot

基本情報:

評価

使ったのは Mac OS X 版です。


インストール

簡単

日本語
  • ソースコードへの日本語入力・編集はOK
  • メニューは 英語のみ、ただしバージョン4.2に対して、日本語メニューを作られた方がいます。詳細→ http://komodonoko.com/taxonomy/term/35 残念ながら 4.3.1では動きませんでしたがもう少し追求してみたいです。
起動時間など
  • 起動時間は、通常のエディターよりは遅いですが Emacs と同じくらいかな? Eclipseに比べるとはるかに早い。
  • 操作に対する反応も早い
補完機能など
  • rubyシンタクスの補完、標準ライブラリーに対するメソッドの補完ができる
  • メソッドの補完はメソッド名のみ、引数やメソッドの説明等は出ない
  • Rails(ライブラリー)の補完も完璧では無いができる。ただし Rails 1.1.6 のようです
  • リアルタイムで文法チェックが行われる (日本語部分がエラーになったりしますが・・・)
その他機能
  • class等の定義しているソースを^K^G で開けます
  • インクリメンタル検索ができる
  • リファクタリング的な機能は無し
  • SVN等との連携機能なし


感想

通常のエディターに比べると遥かに強力であるにも関わらず、軽くい。まだ使い込んでないが、プログラマーに使いやすいような気がする。 英語メニューに抵抗が無い方にはお勧め。


私は仕事で Perl を使う事が多いので、しばらく Perl での開発を Komodo Edit を使ってみようと思う。