まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:devops

IBM Bluemix の利用者に提供されているサービスの1つに IBM DevOps Services(以下、IDS)があります。名前の通り、DevOps のための統合環境サービスなのですが、事実上「ウェブから使えるエディタ」として認識している人もいらっしゃるかもしれません:
2016091306


もちろん統合環境であるからには、こうした「ウェブだけでソースコードが編集できる」機能があることも重要ですが、それだけではありません。ソースコードのバージョン管理として事実上の標準となった Git のリポジトリ機能も使えますし、ビルド&デプロイの管理機能も付属しています。これらはバラバラに(=自分の使い慣れたツールと組み合わせて)使うこともできますし、この環境だけで全て利用することもできます。今回はその前者の例として、IDS を Git のリポジトリとして(のみ)使う例を紹介します。要はソースコードの編集は普段使い慣れたローカルマシンのエディタを使いつつ、ソースコードのバージョン管理に IDS を使おう、という考え方です。必ずしも Bluemix アプリケーションではない、普通のウェブアプリケーションやツールのソースコード管理としても IDS が使える、という使い方をイメージしています。

まずは IDS にウェブブラウザでアクセスして IBM Bluemix の ID とパスワードでログインします:
http://hub.jazz.net/


初めて IDS を使う場合はここでユーザー名の別名を聞かれたりするので適当に決めて答えておきましょう。ただ、ここで決めた名前がこの後作成する Git リポジトリの URL の一部になるのでそのつもりで。

ログイン直後の画面です。既にプロジェクトを利用していたりすると、それらが表示されている画面になるので、見た目は人によって多少変わるかもしれません。以下の画面はまだ何も使っていない、まっさらな状態でのプロジェクト一覧画面です:
2016091301


では早速 Git リポジトリとしてのプロジェクトを1つ追加しましょう。"Start coding" と書かれた大きなアイコン部分をクリックします:
2016091301


ここでプロジェクトの名称(以下の例では "my1stApp")を指定します。今回はこの IDS 内に新しいプロジェクトを作成するので、"Create a new repository" を選択します:
2016091302


続いてリポジトリの作成先を指定するので、"Create a Git repo on Bluemix" を選択します:
2016091303


するとアイコンのすぐ下に今から作成する Git のリポジトリ URL が確認できます。後で再確認することもできますが、一度ここでメモしておきましょう。 また作成するリポジトリにサンプルの README を含めるかどうかを選択するチェックボックスが表示されています。ここでは最初に README を含めておくことにします(任意です)ので、チェックボックスを ON にしておきます:
2016091304


続けてオプションが3つ表示されています。上から順に (1)プライベート(非公開)リポジトリにするか、(2) Scrum 管理機能を追加するか、(3) Bluemix アプリケーションプロジェクト機能を追加するか、です。この例では全て OFF にしていますが、いずれも必要に応じて ON/OFF してください。最後に "CREATE" ボタンを押すと、この設定で Git リポジトリが作成されます:
2016091305


Git リポジトリが作成されると、このような画面に切り替わります。指定した名前のプロジェクトが生成され、その中に License.txt と(オプションで指定した)README.md が含まれている状態で生成されています:
2016091306


画面内で Git のブランチ(この図では master)を表示する部分の右側にダウンロードアイコンが表示されています。現在のブランチの状態でソースコードをまとめてダウンロードする場合はこのアイコンをクリックします(今は行わなくて構いません):
2016091307


また、更にその右側に "Git URL" と書かれた箇所があり、そこをクリックすると改めて Git リポジトリの URL を確認することができます。忘れてしまった場合はこの方法で Git URL を確認してください(このすぐ後に使います):
2016091308


では試しにこの Git プロジェクトの中身を別マシンに clone してみましょう。Git が導入されている環境下で以下のように自分の Git URL(以下の例では https://hub.jazz.net/git/teyande/my1stApp)を指定して git clone してみます:
# git clone https://hub.jazz.net/git/teyande/my1stApp

成功するとこのように License.txt と README.md を含む my1stApp というディレクトリが作成され、現在のリポジトリがクローンできたことがわかります:
2016091301


次にこのプロジェクトディレクトリに移動して、ローカルマシンで変更を加えてみます。本当はここでは vim とか Sublime などの普段使い慣れたエディタ等を使ってファイルを編集することを想定していますが、以下の例では echo コマンドを使ってシンプルな phpinfo.php というファイルを1つ追加しています。何か新しいテキストファイルを1つ(以上)同じディレクトリ内に作成してみてください:
# cd my1stApp
# echo '<?php phpinfo(); ?>' > phpinfo.php

この時点でディレクトリにはもともと存在していた2つのファイルに加え、いくつかのファイルが追加されている状態になっています:
2016091302


ではこの変更を Gir リポジトリに反映させましょう。git add して、git commit します:
# git add .
# git commit -m 'phpinfo.php added.'

こんな感じでローカルリポジトリへのコミットが成功するはずです:
2016091303


では最後に、このローカルリポジトリへの変更をリモートリポジトリへも反映させるべく、git push します。途中でユーザー名やパスワードを聞かれるので、IBM Bluemix のIDおよびパスワードをそれぞれ指定して入力します:
# git push
  :
  :

Username for 'https://hub.jazz.net': bluemix@teyan.de
Password for 'https://bluemix@teyan.de@hub.jazz.net':
  :
  :

↓こんな感じになれば成功です:
2016091304


git push が成功すると、IDS 内のファイルにもその変更が反映されているはずです。この例では元のプロジェクトには存在していなかった phpinfo.php ファイルが git push によって送り込まれ、プロジェクトファイルの一部として追加されていることがわかります:
2016091305


とりあえず Git リポジトリとしての機能が使えることがわかりました。ただこれだけなら GitHub と変わりません。GitHub にない機能の1つとしては「(無料で)プライベートリポジトリが持てる」ことが挙げられます。例えば今回は作成時に Private チェックボックスをオフにしていたので、この時点ではリポジトリは公開されており、同じ URL を誰からでも(IBM Bluemix のアカウントを持っていない人からでも)参照することができる状態になっています:
2016091401


公開状態で作成されたリポジトリをプライベートな非公開状態に変更するには、リポジトリ画面右上の歯車アイコンをクリックし、左メニューから "OPTIONS" を選ぶと、"Private" のチェックボックスが現れます。ここにチェックが入っていれば非公開、入っていなければ公開状態となります:
2016091402


非公開状態に切り替えてみましょう。"Private" チェックボックスを ON にして、"SAVE" ボタンをクリックします:
2016091403


この状態で、同じリポジトリ URL にアクセスすると IBM Bluemix アカウントでログインしていない場合はログインが求められるようになります。また自分(リポジトリのオーナー)以外の ID でログインすると、以下の様な「非公開です」という画面だけが表示されて、中身を確認することはできなくなります:
2016091404


Git のリポジトリを非公開状態で管理しようとすると、GitHub では有償アカウントが必要になります。GitHub 以外にオープンソース製品などで独自にプライベートリポジトリを作れないことはないのですが、IBM Bluemix の IDS を使えば、実質的に無料でプライベートリポジトリまで含めて利用することができる、ということになりますね。 IDS は単なる Git のリポジトリ以上の機能がありますが、この無料のプライベートリポジトリ機能だけでも魅力的だと思っています。


IBM Bluemix から提供されているウェブの統合開発環境である IBM DevOps サービス。ウェブ上に用意されたソースコードエディタを使ってソースコードを編集したり、バージョン管理を行うことができるので、手元のクライアント環境に依存せずにアジャイルなソースコード管理を行うことができます。

ソースコードエディタ単体として見ると、専用のクライアントアプリケーションと比較しての使い勝手ではやはりネイティブアプリケーションの方が使いやすいと感じることもあります。とはいえ、ちょっとしたソースコードの変更を行う必要が生じた際に、わざわざ cf ツールを用意することなくデプロイまで行うことができる環境、というメリットもあります。ケース・バイ・ケースで使い分けることになると思っています。

そんな DevOps サービスを使って Liberty for Java ランタイムとして Bluemix 上に作成したプロジェクトのソースコードを編集しようとすると、その初期ディレクトリ構成が少し特殊で、戸惑うことがあります。例えば Bluemix 環境から Liberty for Java のランタイムを作成し、「Git の追加」をすると DevOps サービスが起動してソースコードのローカルリポジトリがウェブ上に作成されます:
2016022301


作成されたリポジトリにアクセスするには「コードの編集」をクリックします:
2016022302


以下は初期状態のまま何も変更を加えていない状態でのソースコードのディレクトリ構成です:
2016022303


ここに外部ファイル(例えば MySQL コネクターの JAR ファイル)を追加しようとした時にどこに追加すればいいか、すぐに分かりますか?

正解と、そのための手順は以下の通りです。まず src/main/webapp フォルダを右クリックし、ポップアップメニューから「新規」-「フォルダー」を選択します:
2016022309


新規にフォルダが作成されます。フォルダ名の入力が求められたら "WEB-INF" と(半角大文字で)入力します:
2016022301


更に、今作成した WEB-INF フォルダを右クリックして、同様に新規フォルダ "lib" をこの下に作成します。:
2016022303


これで src/main/webapp/WEB-INF/lib フォルダが作成されました。このフォルダの中に JAR ファイルを入れておけば自動的にロードしてくれるようになります:
2016022304


実際に JAR ファイルをアップロードしてみましょう。lib フォルダを右クリックし、ポップアップメニューで今度は「インポート」-「ファイルまたはアーカイブ」を選択します:
2016022305


ファイルのアップロードダイアログが表示されるので、ローカルファイルシステムからアップロードしたい JAR ファイルを選択します(この例では MySQL JDBC Connector の JAR ファイルを選択しています):
2016022306


選択するとアップロードが開始されます。アップロード状況がプログレスバーで確認できます:
2016022307


アップロードが完了すると、プロジェクト内のファイルとして参照できるようになります。これでこのプロジェクト内で MySQL JDBC Connector を使うことができるようになりました:
2016022308


試しに JSP を追加して動作確認してみます。src/main/webapp フォルダを右クリックして「新規作成」-「ファイル」を選んで、MySQL.jsp という名前のファイルを新規に作成します:
2016022311


ファイルはこの画面から中身を編集できるので、以下の様な内容にしました:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ page import="java.sql.*" %>
<html>
<body>
<%
  Connection conn = null;


  //. DB Access information
  String dbclass = "com.mysql.jdbc.Driver";
  String dbhost = "(MySQLサーバー名)";
  String dbname = "(データベース名)", dbusername = "(ユーザー名)", dbpassword = "(パスワード)";
  int dbport = 3306;
  String dburi = "mysql://" + dbhost + "/" + dbname;

  try{
    Class.forName( dbclass );
    conn = DriverManager.getConnection( "jdbc:" + dburi, dbusername, dbpassword );
  }catch( Exception e ){
    e.printStackTrace();
  }
%>
<h2>conn = <%= conn %></h2>
</body>
</html>


MySQL サーバー名、データベース名、ユーザー名、パスワードを指定してコネクションを貼り、その貼ったコネクション変数を無理やり(文字列化して)表示する、というものです。

実際に動かそうとすると MySQL サーバーが必要です。もし自由に使える MySQL サーバーが手元にない場合はこちらのデモ用サーバーをお使いいただく方法もあります:
StrongLoop のデモ用 MySQL サーバー

このソースを追加して(サーバー名、データベース名、ユーザー名、パスワードを変更して)コミット&プッシュ&ビルド&デプロイ後にアクセスすると、このような画面になるはずです。わかりにくいかもしれませんが、コネクション変数(conn)を無理やり文字列化した結果が表示されています。少なくとも MySQL の JDBC Connector は正しく動いている(つまり追加した JAR ファイルが読み込まれている)、ということがわかりますね:
2016022312




 

先日のブログエントリで IBM Bluemix の各サービスの運用状態を確認するためのエスタドを紹介しました:
Bluemix の各サービス運用状態を調べる

が、この中に入っていないサービスがあります。その1つが IDS(IBM Devops Services) です。IDS は IBM Bluemix のユーザーであれば誰でも無料で使うことができるウェブ上のプロジェクト管理&統合開発環境です。このサービスの運用状態はエスタドには表示されないようです。

で、どうやって運用ステータスを確認するかというか、専用のサポートページが用意されていました。まずこちらは
ステータス確認サイトです:
http://status.hub.jazz.net/
2015061601



一方、こちらは今後のメンテナンススケジュールです。あ、ちょうど明日朝にメンテナンス予定あるのね、調べておいてよかった(汗):
https://developer.ibm.com/devops-services/support/#maintenance
2015061602

 
これらと前述のエスタドを組み合わせて使うことで IBM Bluemix の運用状況を確認できることになります。
 

このページのトップヘ