2016年1月25日月曜日

【AndroidStudio】プラグイン探し 始めに

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

ただ今、業務都合により急ぎAndroidStudioの検証を進めています。
まだまだ理解不足ですが、ブログを書きながら理解を深めていきます。

まだまだ不便過ぎるんだが。。。

AndroidStudioを使い始めて数ヶ月。うち実際に触ったのは二週間程度の現在ですが、ダメだ。全然ダメだ。

基本的に私はEclipseを長年使っており、「Eclipsでは出来たのにAndroidStudioでは出来ない」という不便を強いられている自分自身に気付いてしまいます。
元々Eclipseを知らなきゃ何とも思わないのかもしれませんが、何とかならんか……。

プラグインを探してみよう


しかし考察を次に進めてみると、「AndroidStudioで出来ないのでは無く、プラグインが入っていないだけでは?」という発想に至ります。

私の言う「Eclipse」とは「Pleades」を意味していますが、Pleadesは親切な有識者が最初から便利なプラグインを色々と入れた状態で配布されていますからね。
対して、AndroidStudioの方がそういった親切設計が不十分。
最初から入っているプラグインも少々ありますが、これは最低限。
ここから自分でバンバンプラグインを追加しないとAndroidStudioは真価を発揮しないのですよ。

と言うわけで、ここからは便利そうなプラグインを探していきましょう。

現状理解

本格的にプラグイン探しを始めるのは次回以降としまして、今回は初期状態について理解を深めます。

AndroidStudioのプラグイン設定はこちら。

  • ファイル ⇒ 設定 ⇒ Plugins

どうやら配布段階で最初からそこそこ入っているようです。
これは配布元であるGoogleが選定したものですね。

「Android Support」とか「SDK Updater」とか、Android開発に必要不可欠となりそうなものが見えています。

「Git Integration」や「Subversion Integration」と言った項目がありますね。GitやSVNに繋げるのもこれのお陰です。

「AndroidStudioにはGitやSVNからソースをダウンロードする機能があるものだ」ということは誰でもご存じかと思いますが、
正確にはAndroidStudioにその機能があるのではなく、そういうプラグインが最初からインストール済みで配布してくれているというだけです。
その違いを認識しないと、「そうだ、プラグインを探そう!!」という着想に辿り着きませんので日頃からご注意下さい。

インストール方法

インストール手順も見ていきましょう。
上記画像の下の方にボタンが3つありますよね。何だこりゃ。

Install JetBrains plugin...

AndroidStudioの正体は「IntelliJ IDEA」でして、そのIntelliJ IDEAの開発元がJetBrains社です。
このボタンは「JetBrainsが提供しているプラグインを表示する」という、言わば開発元特権ボタン。。。

まあ、JetBrains社純正品なので変なのは混ざっていないでしょう。
基本として抑えておくことをオススメします。

Browse repositories...

プラグインサイトに載っているプラグインの一覧が出てきます。
基本的にここからプラグインをダウンロードすることになります。

山のように大量のプラグインがあります。

手当たり次第に全部入れていたらAndroidStudioがクラッシュするのは確実ですので、ここから必要なプラグインを探していくのが今後の私の活動です。

Install plugin from disk...

上記サイトの場合はインストールボタンを押すことで手軽にネットから自動ダウンロード&インストールしてくれますが、
こっちは手動モードです。

ネット上からプラグインファイルを手動でダウンロードしてくるわけです。
大抵のプラグインは上記の「Browse repositories」で出来るはずですし、こっちの方がミスも無いはず。

手動モードを使うのは特殊な事情がある時のみと考えておけば良さそうです。

終わりに

次回以降は実際にプラグインをインストールしていきます。
欲しいプラグインは沢山ありますので楽しみです。

2016年1月14日木曜日

【Slack】botでも作ってみるか 後編

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

前回に引き続き、ちょっと緩急話題としてSlackのbotを作成中です。

前半:Slackbot

ネットでSlackのbotを調べると最初に出てくるのはコレですね。Slackbot。

詳細は省きますが、簡単に言えば「特定の文字列をSlackに投稿すると特定文字列を返却する」というもの。

testとして作ってみたところ、書くと以下のようになりました。
「test」と書き込むと反応して特定文字列が戻ってくる。


馬鹿馬鹿しいわ!!

とは正にこのことですが、これがSlack関連のbotの半分を端的に表していると言えるでしょう。
つまり、「Slackに投稿した文字列をトリガーに特定の処理を行う」というものです。

これと外部システムを組み合わせるとそれなりの機能が実現出来ますね。

  1. Slackに秘密コマンドを投稿する。
  2. 投稿された秘密コマンド文字列を検知して自作のSlackbotが起動。
  3. Slackbotの処理にて、外部にHTTPリクエストを投げる。
  4. HTTPリクエストを以てサーバ処理のトリガーとなり、本格的な処理が開始。

こんなことが出来るわけですよ。
「本格的な処理」については、現場毎の需要にてご自由にどうぞ。

例えば、お店の売上がいつも気になる社長さんとかいるとしますよね。
そういう時に「本日の売上情報を送信しろ」というコマンドをSlackに投げると、
上記のフローで業務サーバで集計処理が走り、結果を社長さんのスマホに送るとか。

その気になれば「自爆スイッチ」とかもSlackでチョイチョイっと作れるわけですよ。
こりゃ危険だ!!

後半:WebAPI処理

上記は「Slackへの投稿をキーにSlack内で処理が起動する」というものでしたね。
これが半分。

では残り半分はと言うと、「外部システムからSlackに文字列を投入する」というものです。
今回の話はこっちがメイン。

Slackは人がログインして手で入力しなくても、WebAPI経由でシステムで投稿することが出来るのです。
ですから、常駐バッチが常にデータを集計して定期的にSlackに上げる、というやり方が出来ます。

上記の売上が気になる社長さんの例で作りますと、


  1. 業務サーバで1時間おきにバッチが起動し、その日の売上を集計する。
  2. 集計結果はSlackのWebAPIを経由してSlackに投稿する。
  3. 社長さんはSlackに投稿された報告を読む。


こっちの方が合理的ですよね。

前述の「前半:Slackbot」の利用方法もそれなりに使い方があるとは思いますが、私の業務界隈を考えると、
どちらかと言うと「後半:外部処理」みたいに一方的な定期報告の方が需要が多い気がします。

ところでこのやり方、実はSlackを使わなくてもメール送信すれば済む話ですよね。
でも、一日に何十何百もメールを受信したく無いという需要もあると思います。

つまり、

  • 定期報告は一応欲しいけど、だからってメールを大量に送り付けられても困る。
  • 常に確認必須の重要な情報じゃない。ただ、偶に観たい時に観れる程度にデータが届いていればいいんだ。

このくらいのゆる~い情報収集にSlackは便利です。

WebAPIの実現方法


では、そのWebAPIとはどういうものかをご説明しましょう。

まず、公式サイトはこちらです。


そこから辿ると「API Methods」というのがあって、それがこちら。


どうやらWebAPIベースで「チャット投稿」「履歴参照」「プロフィール変更」とか殆ど全部出来てしまうようです。

Slackスマホアプリを自分で作ろうと思っても出来るようになっている。

こうやってWebAPIを幅広く提供したのが今日のSlackの反映なのですね。

「Slackを使いたければ俺達の作った公式アプリを使え!!」ではなく、「全部公開しています。どうぞどうぞ、ご自由に」とオープンにした結果、世界中のエンジニアがこぞってSlackbotを作り、一大勢力を築き上げたわけです。
こういう開放的な姿勢は素晴らしいですね!!

さて、今回は基本中の基本である「チャット投稿」を実行します。

まず、上記「Slack Web API」のサイトから、自分用のbot用の識別トークンを取得します。
ページの下の方にあるので、軽くササッと発行して下さい。


くれぐれも漏洩させないようにご注意を。

次に、チャット投稿のメソッドである「chat.postMessage」の仕様を参考にHTTPリクエスト送信ロジックを構築。




まあ、早い話が単なるHTML送信ですから、極論を言えばJavaとかRubyとかでロジックを組まずともブラウザのURLに文字列を打ち込めば投稿完了するくらい簡単なものです。
リクエスト文字列としては以下のような例となります。


  • https://<あなたのドメイン>.slack.com/api/chat.postMessage?token=<あなたのトークン>&channel=%23general&text=Hello&username=tacybot


本当にこれだけ。これで「hello」というメッセージが#generlに届きます。
リクエストの形式は正式にはPostですが実はgetでも普通に動いちゃう。単純です。

注意点はURLEncodeすることくらいですね。
エンコードを忘れると文字化けして投稿してしまうので注意です。

以上です。

このように特にサンプルを示す必要があるような特段の技術は存在しないのですが、一応、私が作ったJavaソースを張っておきます。


/**
 * Slack送信
 *
 * @author Tacy
 */
public class RequestSlack {

 /** logger */
 private Logger logger = Logger.getLogger(RequestSlack.class.getName());

 /** BASE_URL */
 private static String BASE_URL =
   "https://tacy.slack.com/api/chat.postMessage?token=%s&channel=%s&username=tacy";

 /** トークン */
 private static String TOKEN = "tacy_token";

 /** 送信先の部屋 */
 private static String CHANNEL = "%23genera";

 /**
  * メッセージを送信する。
  * 
  * @param message 送信メッセージ
  * @throws IOException
  */
 public void sendMessage(String message) throws IOException {

  logger.fine("Slack送信:開始");

  String url = String.format(BASE_URL, TOKEN, CHANNEL);

  requestPost(url, URLEncoder.encode(String.format("text=%s", message)));

  logger.fine("Slack送信:開始");

 }

 /**
  * メッセージをPost送信する。
  * 
  * @param urlStr 送信先URL
  * @param postMessage 送信メッセージ(URLエンコード済み)
  * @throws IOException
  */
 public void requestPost(String urlStr, String postMessage) throws IOException {

  logger.fine("requestPost:開始");

  logger.info("リクエストを送信します。:" + urlStr);

  // サーバへ接続する
  HttpURLConnection connection = null;
  DataOutputStream os = null;
  BufferedReader br = null;

  try {

   URL url = new URL(urlStr);

   connection = (HttpURLConnection) url.openConnection();

   connection.setDoInput(true);
   connection.setDoOutput(true);

   // キャッシュを使用しない
   connection.setUseCaches(false);

   // HTTPストリーミングを有効にする
   connection.setChunkedStreamingMode(0);

   connection.setRequestMethod("POST");

   PrintStream ps = null;

   try {

    ps = new PrintStream(connection.getOutputStream());
    ps.print(postMessage);

   } finally {

    if (ps != null) {
     ps.close();
    }
   }

   // レスポンスを受信する
   int responseCode = connection.getResponseCode();

   if (responseCode != HttpURLConnection.HTTP_OK) {

    throw new IOException("post送信に失敗しました。responseCode=" + responseCode);

   }

  } finally {

   if (br != null) {
    br.close();
   }
   if (os != null) {
    os.flush();
    os.close();
   }
   if (connection != null) {
    connection.disconnect();
   }

   logger.fine("requestPost:終了");
  }

 }
}

支援ライブラリ:Hubot


上記は既に存在しているJavaシステムからSlackにデータを投入するソースの一部なのでJavaになっていますが、
単品で動かすbotを作るなら、もっと軽量なスクリプト言語で作った方がSlackっぽくてお洒落かもしれませんね。

その為のSlack向けBot開発用ライブラリとして有名なのはHubotでしょう。



HubotとNode.jsを使って簡単にbotをリリースしていくのも楽しいかもしれませんね。
逆に「既に違う言語でシステムが動いているんだけど……」「Androidアプリから送りたい」みたいな人は、上記のとおり単にHTTPリクエストを送るだけの話ですのでササッと作ればOK。

実に柔軟な対応が可能となっています。

終わりに


Slackはシンプルではありますが高い拡張性を持っています。
上手く使いこなせればとても会社の役に立ちそうですね。

では、本年度もブログ更新頑張ります。
今後とも宜しくお願い致します。

2016年1月4日月曜日

【Slack】botでも作ってみるか 前編

あけましておめでとうございます。

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。
2016年もこのブログ更新を始め、色々と張り切っていきたいです。

本日は年末年始休暇明けなので頭の復活を兼ねて小ネタを。
テーマはSlackです。

Slack

Slackとは一言で言うとチャットツールです。

調べたところによると、公開は2013年8月なので2016年正月の現時点においてはまだ3年経ってないわけですか。
例えばLineやSkypeとかと比較すると誰でも知っているツールの域には到達していませんが最近は急速に普及が広がっており、そのうち業界スタンダードになる可能性も十分にあります。

我が社でも最近、このSlackが便利だという話題を聞きつけ、メインで使っていこうという方向に動き出しつつあります。

今回はアカウントを発行して貰ってから一週間も経っていない私がSlackについて少々調べ、簡単なbotを作るところまでを実現したいと思います。

何が便利なのか?

比較対象として上記に「Line」「Skype」を出しましたが、果たしてこれらはライバル関係と言ってしまって良いのか……。
それぞれ違う機能があるので一概には言えませんが、
敢えてこれらと比較すると、Slackは『企業向け』にスコープが照らされているのが特徴でしょう。

「Line」「Skype」の場合、基本的に1人1アカウントあり、それぞれ各自で『部屋』にドーンと集合して使いますよね。
基本的に『個人重視』なわけですよ。
特にLineなんてセキュリティ的にヤベェ。あれで業務連絡とかやる気にならないですよ。


  • 小学校時代の友達の部屋
  • 中学の友達の部屋
  • 部活の友達の部屋
  • 家族用の部屋
  • 誰にも言えない秘密の部屋


こんな感じに、各自好き勝手に部屋を立てて来て集まるイメージです。

対して、Slackは管理人による統括管理が存在しています。
まず「ジェニシス」という大規模集団があり、その配下にチーム部屋(チャンネルと言いますが)がある。

株式会社ジェニシス
LチームTacyの部屋
LチームXXXの部屋
Lリーダーの部屋
L飲み会開催相談所

とまあ、こんな感じに企業という大組織の中に多数の小型グループが存在しているという状況への対応力がSlackは高い。
この辺りが人気の理由の一つと言えるでしょう。

使い道

というわけで、Slackは企業向けという方向で進化を遂げてきました。
結果、今では他の業務ツールと連携するAPIが豊富に取り揃えられるに至っています。

例えば、Subversion。
SVNにコミットすると「コミットしました!!」というメッセージがSlackに飛んでくるようになるとか。
もちろんGitでも同じ事が可能。

連携アプリケーションはこちらに沢山あるようです。


ちょっと数が多過ぎるので追い切れていませんが、なるほど、『概念』というものは分かってきます。
Slackを情報の集積場として使用するわけです。

現時点だとメールで通知を果たしている所が多いと思います。

例えばRedmineでチケットを更新すると「更新しました!!」のメールが自動的に飛びます。
これは最初の頃は便利だと思っていましたが、長年使っているうちに「メールが多過ぎる」という問題に気付いてしまいました。

1日何十通も更新通知が飛んでくるんですよ。

もちろんフィルタリングとかして自動整理はしていますけど、基本的にメール乱射は悪ですからね。

「別に困っちゃいないけど、もうちょっとクールなやり方は無いの?」

とはずっと思ってました。

そもそもですね、メールのフィルタリングを活用しているのは私が自分でフィルタリングしているからであって、自分でフィルタリングを作るスキルの無い人だったらゴチャゴチャになりますよ。
「とりあえずメールを送っときゃいいでしょ?」って発想はやっぱ配慮に欠けるんですよ。

その点、更新通知をSlackに飛ばすというやり方はSlackそのものが整理機能を果たしますので、幾分スムーズになります。


津波のような大量情報はSlackへ寄せる。


これでIT起業らしいクールなコミュニケーションが取れるかな、と楽しみなところです。

自分でもちょっと作ってみるか

と言うわけで、私はSlackの各種機能のうち「外部から情報を送り込む」というところに活用点を感じています。

既製ツールだと「Redmine」とか「Git」とか、既製ツールの連携機能しかありません。
しかし会社活動をやっていると自社特有の情報発信も存在しますよね。

どんな?
そんなのいくらでもあるじゃないですか。


  • システムがダウンしたらボタン一発で同報を発信して欲しい。
  • 朝一でその日のスケジュールを流して欲しい。
  • 今日がメンバーの誕生日であることをピロッ。
  • ログファイルに[FATAL]の文字列を発見したらSlackに流し込むようになってれば便利だな。
  • 知らんうちに自社サーバがダウンしとる。ping通知を流してくれんか?


細々とした用途はいくらでもありますからね。

「こういうのがあれば便利だなぁ」⇒「じゃあ作ろう」

これをパパッと実現出来れば快適な業務環境が待っています。

とにかく、どんな情報を送り込むかは都度センスが問われるとして、
まずは「どうやったら情報を送り込めるのか?」というアーキテクト部分は把握しておきたいと思います。

終わりに

では、次回は実際にメッセージ投入機能をJavaで作っていきたいと思います。

2015年12月8日火曜日

【AndroidStudio】設定のカスタマイズ

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

ただ今、業務都合により急ぎAndroidStudioの検証を進めています。
今回は設定の微調整を。

不便極まりない


前回の日本語が不完全なことも去ることながら、エディターを開いても行数が出ていないとか、インポートが自動で入ってくれないとか、色々不便なことは盛りだくさん。
しかしこの辺りは手動で設定することで快適化出来るようです。

今回は色々とカスタマイズ&ショートカットを把握していきましょう。

エディターに行数を表示する&空白を表示する


最初はこれ。エディターに行数の表示が無ければやり辛くてしかたありません。
空白を表示する機能も追加出来ます。
以下で設定出来ます。

  • ファイル > 設定 > Editor > エディタ > 外観

私は空白は表示しない方が好みなんですけどね。

コードのフォーマット、インポート最適化


実装していたらソースがデコボコ……。フォーマットしたい。
インポートもゴジャゴジャ。綺麗にしたい。

そういう時はショートカットで行きましょう。

  • コード > コードの再フォーマット(Ctrl + Alt + L)
  • コード > インポートの最適化(Ctrl + Alt + O)

ショートカットキーも覚えていけば効率も上がっていくでしょう。

インポートの自動セット


あれ~。上に書いてある「インポートの最適化」をしてもインポートされないぞ???
これは「不要なインポートを削除する」だけで、必要なインポートのセットはやってくれないのです。
オートインポートから「オンザフライで設定する」にしちゃって下さい。

  • ファイル > 設定 > Editor > エディタ > AutoImport

オンザフライってどういう意味なんでしょう???
まあ、自分の操作とは別の所で自動インポートが作動するという意味なのでしょうが、余り聞かない用語です。

変更したタブに*(アスタリスク)を付ける


「沢山開いたらどれを変えたか分からなくなっちゃいました♪(テヘペロ)」なんて馬鹿げたことをしないように、未保存編集中のファイルには*(アスタリスク)が表示されるようにしましょう。

  • ファイル > 設定 > Editor > エディタ > Editor Tabs

マウスオーバーでドキュメントを表示する


「あれ~? EclipseだとマウスオーバーでJavaDocが出るのに、こっちは何も出ないぞ???」

  • ファイル > 設定 > Editor > エディタ

テーマ変更


AndroidStudioの色彩を好みに変更出来るようですね。

  • ファイル > 設定 > Appearance & Behavior

お好みでどうぞ。

メモリインジケータ表示


「くそっ、メモリ不足で落ちやがる……」
AndroidStudioが今、どれくらいのメモリを消費しているのかのゲージを表示出来ます。

  • ファイル > 設定 > Appearance & Behavior

コードテンプレート


クラスを新規作成すると、真っ新な状態でファイルが生成される……。
「@Author」みたいなJavaDocコメントとか、パッケージ上部の署名などは自動セットした方が楽チンですよね?

  • ファイル > 設定 > Editor > エディタ > ファイルテンプレート

ここは会社のコーディング規約などと照らし合わせて最適化しておくと便利でしょう。

JavaDoc入力支援機能


「新しくメソッド作ったぞ。さて、JavaDocを……。えーっと、どういう記述ルールだっけ???」

JavaDocを書きたい場合は、そのメソッドをクリックして「Alt + Enter」です。


AndroidStudioのショートカットは「Alt」が多めな印象です。
特に「Alt + Enter」はJavaDoc以外にも色々出てきますので、「困ったらとりあえずAlt + Enter」を試して見ると良いかもしれません。

終わりに

他にも設定は色々ありますが、とりあえず、私が最初にザーッと設定した方が良いと思ったのはこんな所ですね。
人に依っては「Logcatの色を変える」とかまでやっている人もいるそうな。

この記事のみならず「こういうことは出来ないのかな?」という着想を持って調べて頂ければ、案外細かく要望に応えてくれるのではないかと思います。

2015年12月1日火曜日

【AndroidStudio】インストール&日本語化

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

ただ今、業務都合により急ぎAndroidStudioの検証を進めています。
では、早速アプリをインストールしていきましょう。

インストール


インストールについては記事を省略させて頂こうと思います。
以下公式サイトからアプリをダウンロードして下さい。

日本語化


さて、AndroidStudioは初期状態では英語ですので、日本語化していきたいと思います。
しかしこの日本語化がちと問題。
今回のテーマは日本語化です。

調査を進めていきますと、AndroidStudioを日本語するには二種類のやり方があることが分かりました。
Eclipseの日本語化ツール「Pleades」を使用する方法と、
AndroidStudioのベースとなったIDE「IDEA」の日本語化ツールを流用する方法です。

Pleadesで日本語化


結論を言いますと、Pleadesを使用する方法はやめておいた方が良いと思います。
一応、手順をご紹介します。

まず、Pleadesの公式サイトよりプラグインをダウンロードします。


ダウンロードしたZIPファイルを解凍すると「plugins/jp.sourceforge.mergedoc.pleiades」というフォルダがありますので、これをAndroidStudioの「plugins」の配下に置きます。
そして起動オプションファイルに起動引数をセットします。
ファイルは使用しているOSのビット数に依って違います。

  • 32bit:studio.exe.vmoptions
  • 64bit:studio64.exe.vmoptions

ここからが問題です。
まず、起動オプションに以下を設定しろという記事が目立ちます。

-javaagent:../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

でも、これだと動かないんですよね。
ダブルクリックで起動するとホームディレクトリがログインユーザのホームパスになるもんで、相対パスでは動かないのが真相だと思います。
AndroidStudioをホームパスにインストールしているとは限りませんからね。ダメダメ。
絶対パスで指定する必要があります。

さて、絶対パスで無事にパスを通したとしても、以下のエラーログが出ます。

EmptyThrowable: Short name not matched for class com.google.gct.idea.appengine.validation.ConstructorInspection: getShortName() = コンストラクター; ep.shortName = Constructor
20:25:59 NullPointerException: null

原因は分かりませんが……。
一応、日本語化そのものは作動しますが、得体の知れないエラーが継続的に出てしまいます。
ちょっとこんな状態で作業をするのはどこに落とし穴があるか分かりませんので、現時点においてはPleadesを使った日本語化は辞めておいた方が良いでしょう。

IntelliJ IDEAの日本語化ツールを流用


では、本命であるIntelliJ IDEAの日本語化ツールを使用しましょう。
GitHub上に有志の方が日本語化ツールを公開して下さっていますので、これを使用させて頂きます。


右下の方にダウンロードボタンがあるのでここからダウンロードして下さい。


これを解答すると「resources_jp.jar」というファイルがあるので、これをコピーし、
「Android Studio/lib」の配下に置きます。


これでOK。
無事に日本語化出来ました。


しかし……、ん~。
日本語化が十分とは言えませんね~……。
元々がIntelliJ IDEAの日本語化ツール。
AndroidStudioはIntelliJ IDEAをカスタマイズしたツールですから、8割方はこのツールで日本語化出来るのですけど、出来ていない部分もあるのです。

完全に日本語化するのは現時点では難しいようです。
中途半端でもいいから少しでも日本語化するか、いっそのこと覚悟を決めて全部英語のまま進めるか、ここは利用者の判断が入るところだと思います。

やっぱりこっちもちょっと不安があるかなぁ……。
だって「元からAndroidStudioを想定していない」んだから、どんなバグがあったって不思議じゃないでしょ?

幸い「resources_jp.jar」を削除すれば一発で元に戻ります。

ここはちょっとハイブリッドな方式にして、

  • 最初は日本語化して使う。
  • 慣れてどこにどんな機能があるか全て把握したら、英語に戻す。

英語でやれるなら英語でやるのが一番に決まってますからね。
自分が英語を覚えるまでの手助けツールくらいの位置づけが良いかもしれません。

終わりに


日本語化が不完全なところあたり、Eclipseと比べるとまだまだ発展途上の感は否めないAndroidStudioです。
引き続き調査を継続します。

2015年11月24日火曜日

【AndroidStudio】始めに

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近は目下MicrosoftAzureの利用方法を検証中ですが、業務都合により急遽Android開発環境「AndroidStudio」に切り替えます。

Eclipseプラグインのサポート終了


さて、事の発端はEclipseのAndroidプラグインのサポート終了でした。


うっ……。きっつー……。
長年の間、Androidの開発環境と言えば、それは「Eclipse + Androidプラグイン」でした。
GoogleがそのAndroidプラグインのサポートを辞めてしまうので、間もなくこの環境は過去の遺物と化してしまいます。

その代わりにGoogleが公式開発環境として掲げるのが、この「AndroidStudio」なわけです。

しかしですね、私みたいに「Eclipse以外で開発なんてやったこと無いよ!!(=やりたくねえ)」ってエンジニアは星の数ほどいると思いますよ。
容赦無く切り捨てられてしましました。無念。。。

でも、Googleの気持ちも分からなくは無いですね。
だって、「Eclipse + Androidプラグイン」の構成って確かに動作がイマイチな部分もありましたからね。

  • Javaのバッチ開発⇒Eclipseで
  • JavaのWebアプリ開発⇒Eclipseで
  • JavaのAndroid開発⇒もちろんEclipseで!!

みたいな感じに、「同じJavaだから全部同じEclipseで」っていう発想が限界に来ていたのでしょう。
特にAndroidは独自の仮想マシンを積んだりシミュレータを積んだりと、他の開発と比べても特に異質なものです。
色々と重かったり、互換性やなんやらでデザイナーが表示出来なかったり……。
GoogleがAndroidに限った特化環境を欲したのも無理からぬ話と言えば納得です。

残念ではありますが、他ならぬGoogle様が仰るのだから従うしかありませんね。

ちなみに、それでもEclipseで開発を続けたい人も当然おり、Andmoreという延命プロジェクトが進行中のようです。


往生際が悪いですね……。
面白い試みだとは思いますが、そんなことやってたらそれだけAndroidStudioへの移行が遅れるではありませんか。
今はAndrodid勢は一丸となって技術を推進していかなければならない時なのですから、そんな反乱分子みたいなことはやってないで、そのパワーはAndroidStudioのプラグイン開発にでも使って頂きたいです。

これをお読みの皆さんはくれぐれも「もうちょっとEclipse使えないかな?」なんてセコいことは考えず、さっさとAndroidStudioへと移行し、人柱となって下さい。

そもそもAndroidStudioって何だ?


しかし、私もEclipse人間である都合上、急にAndroidStudioなんて出されても困るのは事実。
ちょっとAndroidStudioの背景を勉強しておきましょう。

調べた所によると、AndroidStudioはココに至るまで概ね以下の歴史を辿っているようです。

  • 2013年:発表
  • 2014年:ベータ版
  • 2015年:公式ツール化

2015年現在では最新鋭の開発環境です。
最新鋭と言えば聞こえは良いですが、要するにそれだけまだまだ発展途上の環境と言い換えることが出来ます。
色々と問題が起きることは目に見えていますが、やるしかありません。頑張って行きましょう。

さて、更に調べて見ると、AndroidStudioはEclipseとは全然別物だということが分かってきます。

AndroidStudioは「IntelliJ IDEA」という別の開発環境をベースにAndroidに最適化した環境とのことです。

IntelliJ IDEA


では、AndroidStudioの元となっているIntelliJ IDEAとは何でしょう?

ZeroTurnaround社の2012年の調査報告によると、世界第二位の人気を誇る開発環境にしてEclipseの第一のライバルです。

  1. Eclipse:76%(IBM)
  2. IntelliJ IDEA:28%(JetBrains)
  3. Netbeans:17%(サンマイクロシステムズ⇒Oracle)

76 + 28 + 17 = 121% って100%超えてるじゃねえか!!って思いますが、きっと複数の開発環境を使い分けているチームもいるということでしょうね。
しかしEclipseが圧倒的第一位であることは間違いありません。

しかし、統計を見ると全体の3割弱はIntelliJを使っているって意味になりますよね。
でもその割にはIntelliJを使ってる現場なんて全く聞いた事が無いぞ。単に私の住む世界が狭いだけでしょうか?

それはですね、特の根拠はありませんが、多分「日本は世界標準よりも圧倒的にEclipseが強い」、これだと思います。

結構あるんですよ。
世界の人気傾向と比べて日本はちょっと独自文化を築いているというパターンが。
きっとIntelliJもこのパターンなんだと思います。

終わりに


と言うわけで、AndroidStudioの正体はIntelliJ IDEAだということが分かりました。
そして日本での普及は低い……。

となると、今後に調べていく上での心構えも足ってくるというものです。

  • AndroidStudioのベースはIntelliJ IDEAである。
  • AndroidStudioで調べて分からない場合はIntelliJ IDEAで調べる。
  • 日本語情報が少ないので英語サイトもバンバン読むべし。

こんなところでしょうか。
次回以降もしばらくはAndroidStudioの勉強を進めていきます。

2015年11月16日月曜日

【AzureでSugarCRM】日本語化

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

現在はAzureでSugarCRMを使用可能にしようと画策しています。

英語



英語だ!!

これじゃ全く使い物にならないぞ……。
日本語マニュアルはあるんですけど、肝心のどうやったら日本語に出来るのかが見つからない……。


日本語化プロジェクトは閉鎖してるし。


参ったな、こりゃ。。。
最初から日本語のCRMを導入したいところですが、Azureでやるという制約がある以上、何としてでもSugerCRMじゃなきゃ困るんですよ。

GitHubを探しても無い。

6カ国語しか対応していないのか?
過去には日本語パックがあったはずなんですよ。

Japanese Language Packはどこ行った……。

まあ、結論としてはネットの海から拾ってきました。

  • SugarCE-JLP-6506.zip

日本語化作戦

最新バージョンでは無いようですが、これでもそこそこは日本語化出来るでしょう。
しかし、古いバージョンのパッチを最新バージョンに宛てようとしても出来ませんので、小細工を行います。

まず、展開しているアプリのバージョンを確認。


Aboutのページを見ると「Version 6.5.22 (Build 1055)」となっています。
これがAzureのバージョンのようです。

SugerCRMの最新バージョンは2015年11月現在で7.6ですから、随分と古いですね……。
どうやら2013年頃から止まっている模様。
まあ、タダだし仕方ありませんね。

ともかく、これで展開環境のバージョンが分かりました。
次に、日本語化パッチをゴリ押しで宛てる為の小細工を行います。

「SugarCE-JLP-6506.zip」を解答すると以下ファイルが出てきます。


ここから「manifest.php」を開きます。

そこに「acceptable_sugar_versions」という項目があり、正規表現でそのパッチの対象バージョンを指定出来るようになっています。
これを無理矢理Version 6.5.22書き換え!!


終わりましたら、再びZip圧縮して元に戻して下さい。
これでバージョン変更完了ッ!!

ここまで来たら後は簡単です。
Adminページを開きまして、Module Loaderページへと進む。


その先はファイルアップロード画面ですので、先ほどのZipファイルをアップロードして下さい。


これでパッチ適応完了です。
一回ログアウトしてログイン画面に戻りますと、選択メニューに日本語が選べるようになっています。


そしてログインしますと……。


やった!!
日本語化成功です。

検証

さて、無理矢理過去のバージョンの日本語化パッチを宛ててしまったのでどこかバグっていても不思議ではないのですが、
どうやら九分九厘は正常に日本語化出来ているようですね。

それでももし上手く日本語化出来ていない部分があったら、自分で改修すれば良いでしょう。
日本語化パッチの正体は以下ですから。


単純にラベルを日本語に置換しているだけのようです。
これなら自分でも何とかなりそうです。

終わりに


さて、これでめでたく無事にSugerCRMを使用開始出来そうです。
少し触ってみましたが、ちょっと動作が重い点が気になるものの、それ以外は普通に使って行けそうですね。

最後に、私が上記で改修した日本語化パッチを以下に置いておきますので、
これからAzureでSugerCRMを活用した方がいらっしゃいましたら、ご自由にご利用下さい。


クラウドは積極的に活用していきたいものですね。