いつブロ

いつまで続くか分からないブログ(仮)主に趣味やプログラミングに関するメモを書いています。

社内勉強会をやってみた【追記あり】

f:id:koichi0814:20150129004906j:plainhttps://www.flickr.com/photos/kennedylibrary/4312501994/

去年の9月からずっとやりたいやりたい言っていた事が叶って、
社内で勉強会を開催しました。
 
うちの会社はIT業界でもまぁ良く見かけるいわゆるSI会社でありまして、
月に1回やっている部会というやつで、同じ課のメンバーや部内のメンバーと顔を合わせます。
そういう訳で同じ会社の社員なのに名前を知らないという事が信じられない時期もありました。
この会社に入って4,5年ぐらいは本当に自分がどこの会社に所属しているのか分からないぐらいでした。
この手の会社でよく問題になる帰属意識ですね。
 
ですから社内勉強会を開くと言っても、そもそも集まらない問題があるので、
月1の部会を利用することにしました。
会社のイベントを利用するのでその為の許可を得たり、他の予定との兼ね合いもあり延び延びになっていました。
 
月1でも帰って来ない・来れない人も居るわけで、
勉強会に参加してくれたのは2日間で20人ぐらいでした。(数えていなかったので大体です)
部の人数が多く部会が2日間に分かれて行われるので、勉強会も2日間開催しました。
 
そのときのスライドは、まぁ、公開出来るほど凄いものでもないのでここでは割愛します。
 
どんな内容だったかザックリいうと以下の2本立てでした。

  • IT勉強会のこと(15分)
    IT勉強会に参加する前のイメージと参加してからの心境の変化をお話しました。
    去年のまとめ(http://k-koba.hatenablog.com/entry/2014/12/27/021349)と大体同じです。
  • Java8のこと(45分)
    今年で誕生20周年を迎えるJavaの歴史と、Java8で追加された新機能の内、
    ラムダ式とStream APIについてJava7以前と比較してどう変わったかをお話しました。

IT勉強会については、今まで参加した事がない人が多かったので、
その人達に勉強会の楽しさや参加して得られるものが少しは伝わったかなと思います。
Javaの方は、そもそもJavaを知らない人が多かったので少々敷居が高かったかも知れません。
 
 

勉強会をやってみて苦労したこと

  • 自分がやりたいという思いとは裏腹に社内の調整が進まず延期になったこと
  • 周知の方法(社内SNSがあるが浸透していない・・・)
  • 話す内容のレベル感を聴いてくれる人に合わせるつもりだけど、レベル感がそもそも分からない

勉強会をやってみて良かったこと

  • 人前で話をする良い機会になった
  • 社内で一度も喋った事がない人と話せた
  • 周りを巻き込んで勉強会を継続出来そうな流れが作れた
  • 社内SNSの利用促進に貢献出来たかも
    (自分を含め数人しか利用していないという・・・)
  • IT勉強会に興味を持ってもらえた
  • Javaに興味を持ってもらえた、かも。。。

 
社内勉強会をやるという風潮が全くなかった弊社ですが、
やってみると意外と興味を持ってくれた方も多かったので、
これを機に徐々に勉強会の活動が広まっていけば良いなと思いました。
 
 

追記

勉強会でも紹介したIT勉強会ですが、
定期的な更新を止めると作者が宣言されました。
エンジニアであれば一度は通る道と思っていましたが、なくなってしまうのは寂しいものがありますね。

西脇.rb&神戸.rbのハッカソンで機能改善に取り組んだ at @nilquebe #nshgrb‬

f:id:koichi0814:20150111181001j:plain

 
今年最初のエントリーです。
西脇.rb&神戸.rbの勉強会に参加して来ました。
 
Kobe Rubyist Connect ハッカソン ~Railsアプリをみんなで進化させよう!~ - 西脇.rb & 神戸.rb | Doorkeeper
 
ハッカソンというタイトルですが、技術とアイデアを競い合うハッカソンではなく、みんなで機能改善をしようというものでした。
 
今回の勉強会では「Kobe Rubyist Connect」というRailsアプリケーションをみんなで開発しました。

Kobe Rubyist Connect は西脇.rb&神戸.rbの有志で開発しているwebサービスです。
このwebサービスは、勉強会参加者のプロフィールを事前に登録してもらい、勉強会当日にそのプロフィールページを見ながらお互いに自己紹介する、という利用シーンを想定して作ったものです。
(まるで私が作ったかのように聞こえますが、Doorkeeperからの引用です。)
 
@yuji_shimodaさんが去年の勉強会で作り始めたもので、とりあえずユーザーのプロフィールの登録と一覧表示まで出来ていた状態でした。
そこからあんな機能やこんな機能がいるよねーという話をして、「じゃあ僕はこのIssueやります」とか「私はデザイン系で」とか宣言して開発を始めました。
 
 
 
 
そうして出来上がったのがこれです。

f:id:koichi0814:20150111190023p:plain

 
とてもシンプルで良い感じですね!  
 
 
 
 
 
 
シンプル過ぎてアレな感じですね。。。  
 
 
 
 
 
 
 
説明無しでいきなりログインとかつらい。。  
 
 
 
 
 
 
 
 
・・・
新年早々ウソを付いてしまいました。
本当はこれが出来上がりました。
(さっきのはハッカソン前のトップ画面でした。)
 
 

f:id:koichi0814:20150111224935p:plain

 
めっちゃカッコいい!!!
コレですよコレ!
こういうのやりたかったんです!
普段は業務システムしかやってないので、こういう一般ユーザー向けの見た目の良いシステム作りたかったんですよねー!
業務システムばっかりの人なら絶対分かってくれると思う!
 
 
トップ画面を下にスクロールするとどんな人が使っているのかも分かります。
 

f:id:koichi0814:20150111191253p:plain

 
あとは、ログインしなくても中はどんな感じなのかな〜というのが分かる機能が早く欲しい。
(Issueが上がってて既に作業中!)
(私ではない)  
と、思ったらもうプルリク来てて本番環境に上がるの間もなくか。
 
凄い!
各々がやりたい事を宣言してやって行くから、仕事でタスクを振られてやって行くという作業よりもかなりの早さで仕上がって来る。
スケジュールがあって、タスクが振られててっていうMS Project的なやり方よりはこういう風に自分で宣言してやって行く方が楽しいし、やりがいがありますね。
 
 
で、私が追加した機能は「プロフィールに生年月日の登録欄を追加して、表示する際に年齢を自動計算して表示する」というものです。
(必須入力ではないですよ)
デザインで「おおっ!」と言わせるようなものではなく地味〜な機能です。
 
この機能が欲しかったのは、
勉強会に参加するときにアイコンや自己紹介では一体何歳ぐらいの人なのか検討もつかないので、年齢による自分の立ち位置的なものが分かれば話しやすいなーと思ったのがきっかけです。
 
カバー写真の体制でやってみたんですが、両サイドがレベル高すぎで手取り足取りな感じでした。

f:id:koichi0814:20150111233705p:plain

 
今回の勉強会で実際に手を動かしたのは、ほぼ午前中だけでしたが、
とても満足出来ました。
他にも簡単そうなIssueがありましたが、時間切れで中途半端になりたくなかったし、
チームとしてやりたかったので、午後からは超高速タイピングが見れてそれはそれでとても楽しかったです。

f:id:koichi0814:20150111235107j:plain

 
 
今回の勉強会でtryメソッドを使いました。
Ruby使う人には当たり前のメソッドですが、これってJava8のOptionalクラスだなって思いました。
あと、みんながmapメソッドが好きって言ってましたが、
これもJava8の新機能であるStream APIのmapと同じやなーって感じでした。
Rubyに初めて触れたときにめちゃくちゃ面白い言語だと思いましたが、
最近Java8を使ってて相当Rubyを意識してるなーと思いました。
(Java8の登場でScalaは梯子を外された感じでしょうか。)
 
今後の勉強会ではtryやmap以外にJava8に似ているメソッドが無いか探すのが当分の楽しみです。
 
 

勉強会の会場となったNilquebeについて自分メモ

Nilquebe | 神戸・阪神間のコワーキングスペース的ワークスペース
 
普段から阪神沿線とは無縁の生活を送っている私としては、
行ってみるまでちょっと行きにくいなぁと思っていました。
神戸三宮(阪神)から行くと考えると意外と直ぐに行けるし、
駅からも徒歩1分で同じ建物の1Fにローソンがあるので飲み物にも困らないのが良かったです。
それに何よりも机と椅子が良かった。
猫背&なで肩の私でも長時間座ってて苦にならなかったのが良かったです。
 
今までレポートを書いたりするときに集中出来る場所として図書館を利用していましたが、
飲み物はペットボトルのお茶しかダメという決まりがあったり、PCを使える部屋とトイレが少し離れているので防犯面にも心配がありました。
その点ニルキューブは、

  • ロッカーがある
  • 飲み物にも制約がない&コンビニが直ぐそこ
  • トイレも近い
  • Wi-Fiに安心感
  • 駅チカ(徒歩1分)
  • 机と椅子が自分にピッタリ

という点が私が利用している図書館に比べて良かった。
図書館は無料だけど、有料でもこれだけのメリットがあるのでまた利用したいと思いました。
 
完全なる自分メモ

f:id:koichi0814:20150112004444p:plain

勉強会のときは普通で行ったので途中11駅もあるという阪神電車の駅の多さにビックリ。
次は絶対急行に乗る。

2014年振り返り

f:id:koichi0814:20141227015327j:plain

 
今年は公私共に成長の年でした。
特に個人的な活動としてIT勉強会に参加した事が一番大きかったです。
今までIT勉強会って ”どっかのマニアックなオタク系の集まり” としか認識していなくて、
そんなおっかない所に行ったら最後、自分もオタクの仲間入りかと思っていました。
 
普段仕事をしていても分からない所は自分で調べて解決出来ていました。
ただ、仕事で使わない技術は疎くなる一方でそういう技術を持っている人にも憧れていました。
特にフロントの技術には興味はあるけど、自分でやってみるにも限界が・・・
 
プログラマーとしての技術力の陳腐化にかなりの危機感を持っていたので、
どうにかしてそれを克服したい!
 
IT関連の情報サイトを見ても単なるプログラム言語だけでなく、
クラウドとかCIとかgitとか…仕事で使う機会がなかった所に対する
業界の流れが盛んに取り挙げられていて、
このままやとアカン…
 
それで、かねてより気にはなっていたけど、
行く必要性も感じられなかったIT勉強会というヤツに行ってみる事にしました。

IT勉強会で検索すると最初に引っかかったのがIT勉強会カレンダーでした。
地域版もあったので関西圏の勉強会を探してみましたが、
どうも胡散臭い感が拭えませんでした。
 
どういうキーワードで検索したか覚えていませんが、
近場で同じような事を考えてる人居ないかなぁとぼやぁっと調べていたらありました!
Rubyの勉強会
西脇.rb & 東灘.rb ペアプログラミング In Action - 西脇.rb & 神戸.rb | Doorkeeper
(2014年7月、東灘.rb => 神戸.rb に名称変更)
 
Rubyかぁ。。。
使ったことないし、多分仕事でも今後も当分使わない。。。
 
でもそれ以上に気になったことが、
西脇.rbの西脇と、この勉強会の会場となった小野市うるおい交流館エクラ
そんな田舎でなぜ!?
出身地なので余計に気になってしまいました。
 
西脇と東灘という局所的な地域名でしたが、
普段は神戸中心で勉強会をやっているという事だったので、
暫く注視していました。
 
そんなとき、Twitterで西脇.rb & 東灘.rbの勉強会のつぶやきが流れて来ました。
コミュ障なので行きたいのを隠しながらつぶやいてみると・・・
 


 
主催者の一人からリプライがありました。
 


 
おお!これは!
これで行く理由が出来ました!
コミュ障ですから理由が必要です。
 
 
主催者も含め全員知らん人ですから、
行くまでは緊張しました。
もちろん下調べはしましたよ。

でも、お互いTwitterのアイコンが顔写真になっていたので、
集合場所に着いたときも「あのぉ、すみません〜」みたいな感じで合流するのではなく、
近づいたら向こうから声を掛けてもらえて助かりました。
 
この勉強会に参加した後で他の勉強会に参加して
改めて良かったと思った所を挙げてみたいと思います。

  • youRoomというコミュニケーションツールの存在
    ここで勉強会に参加される方が勉強会用の自己紹介を書いてくれるので、
    どんな人が集まるのかといった不安が軽減されます。
  • 勉強会がお昼過ぎから始まるので、その前に皆でご飯を食べてから勉強会の会場に向かう
    (この勉強会は基本的に土曜日開催)
    初めてでも打ち解ける事が出来るのでその後の勉強会がスムーズでした。
  • いつも居る人同士で固まらない
    初心者の人でも入りやすい雰囲気作り。
    これは結構大きいと思いました。
    何度も参加している人同士は何でも話せますけど初心者はそこに入れないので。
  • 勉強会の後の懇親会(これは大体どこの勉強会でもやっていますけど)
    ご飯で始まってご飯で終わる。丸一日楽しめる勉強会でした。
  • 勉強会後の振り返りの場がある
    githubで感想などを書くようになっていて、
    皆書くのが早いので忘れずちゃんと書くことが出来る。
  • 色んな分野の人が集まっていてとても刺激になる
    Rubyの勉強会ではあるけど、普段仕事で使っている人も居れば、
    完全に趣味でやっている人も居ますし、開発の仕事をやっていない人も居て
    非常に面白いです。
    (ご飯で始まってご飯で終わるから、そういう事を話すタイミングがある)
  • 主催者が多過ぎない(伊藤さんとAkiさんの2名体制)
    主催者が5,6人居る勉強会はやっぱりそういう人たちで固まっている感じでした。
    こちらはAkiさんがちゃんと仕切ってくれるので何事もスムーズでした。
  • また行きたいと思える勉強会
    これです。
    色んな人と喋って、新しい事を学んで、楽しめる勉強会。

 
勉強会も自分に合ったものを見付けるまで苦労があるかも知れませんが、
たまたま最初に行った勉強会がこんな感じで自分に合っていたので、
まだ勉強会に参加した事がない人には一皮剥けるためにもオススメです。
 
特に若い人にはオススメです。
30代も半ばに差し掛かって来てて、初めての勉強会でとても刺激を受け、
もっと若いときに何で参加してなかったんだろうと後悔しました。
今は色んな勉強会が盛んに開催されているし、ネットの情報も結構あるので、
昔よりは「行ってみたけどイマイチ・・・」という事が減っているのではないかと思います。
 
それにこの業界は結構狭いので、自分の周りに居る人が実は結構凄い人っていう事もあります。
後から知って、マジで!?という事が実際にありました(笑)
そういう意味では、周りの人が仕事以外にどういう活動をしているかという事にアンテナを張っていても損はないと思います。
 
今年はブログも始めたので、来年はアウトプットの方にも力を入れつつ勉強会への参加も継続して行きたいと思います。
1月には社内勉強会を開催するということにもチャレンジします。
何ヶ月も前から調整に調整を繰り返して漸く開催までこぎ着けました。
会社で勉強会をやるのって、勉強会そのものよりも、スケジュール調整の方が大変という事を思い知らされました。

RubyMineのJetBrainsにライセンスについて聞いてみた

これは RubyMine Advent Calendar 2014 の18日目のブログエントリーです。
昨日は @spring_aki さんの Git - RubyMineで簡単に行ごとのコミットログを見る方法 (Annotate,Blame) - Qiita でした。
明日は @genta さんです。
 
 
前回のエントリー(Goodbye Struts, Hello Java EE #javaee)が堅すぎたので、
今度は気をつけたいと思います。
 
さて、この Advent Calendar は RubyMine です。
初めにお断りを入れておくと、私自身 RubyMine を1回ぐらいしか起動した事がありません!
普段 Ruby の開発では MacVim を使っているので、完全に初心者です。
にも関わらず、Advent Calendar に挑戦したのには訳があります。
 
それは RubyMine の OSライセンスを持っているからです。 1回ぐらいしか起動したこと無いクセに!
このカレンダー見ていると結構使い勝手が良さそうなので、
そのうちVim?だせぇとか言ってるかも知れません。
そのときはすみません。
 
 

1. ライセンスの種類には一体どんなのがあるの?

RubyMine には大きく分けて有料のライセンスと無料のライセンスがあります。
有料のライセンスは一度購入すればずっと使用出来ます。
1年間のアップグレードサブスクリプションが付いてきますので
その1年間は何度でも無料でアップグレードが出来ます。
継続してアップグレードしたい場合はサブスクリプションの延長を申し込む必要があります。
サブスクリプションの追加購入は有料です。
無料のライセンスは1年間有効で毎年更新が必要です。
 
ライセンス比較表(RubyMine :: License Comparison Matrix)を翻訳するとこんな感じ。
ここから先、翻訳している箇所が度々出てくるので、間違いがあればそっと教えて下さい。

f:id:koichi0814:20141214072805p:plain

個人的にOSSを作っているので、
一番右のオープンソースライセンスに食いついた訳です。
なんて言ったって無料ですからね!
 

2. OSライセンスを申請してみる

https://www.jetbrains.com/ruby/buy/f:id:koichi0814:20141214074157p:plain

ライセンス比較表には載っていませんでしたが、
スタートアップなら半額というオプションもあるんですね。
「For Open Source projects」のリンクをクリックして次に進みましょう。
 

f:id:koichi0814:20141214080523p:plain

申請の最初の画面にはOSライセンスの条件について書かれています。
リンクをクリックする前に条件も一応確認しておきましょう。 英語のニュアンスが難しい。。。

※赤字は私からのコメントです。
1. You are the project lead or a regular committer.
あなたはプロジェクトリーダーかコミッターである。
じゃなきゃ申請しないでしょ。
 
2. Your OS project meets the Open Source definition
(http://opensource.org/docs/osd).
お使いのOSプロジェクトは、オープンソースの定義を満たしている。
肝心な部分をリンクで飛ばすなんて。。
 
3. You do not perform any paid support, consulting or training services for your OS project,
and you do not distribute paid versions of your OS software. If you provide paid services
for or distribute paid versions of your OS software, we might have other options
available for your project. Please contact us at opensource@jetbrains.com for details.
任意のOSプロジェクトのサポートに使用したり、コンサルティング
トレーニングサービスを行って料金を取ったり、OSSの有料版を配布しないで下さい。
もし有料版を配布する場合は使用できるオプションがあるかも知れませんので、
opensource@jetbrains.com まで連絡して下さい。

OSSを有料に…って、別プロジェクトになりそうだけど、そういうのもダメなのかな。
 
4. Your OS project is being actively developed for a minimum of 3 months.
3ヶ月以上に渡って、積極的に開発されている。
ちょうど申請する1ヶ月ぐらい前にgithubに上げてた!
 
5. Your OS project's community is active. This means that you have recent activity in your
newsgroups or forums.
OSプロジェクトのコミュニティはアクティブです。
これはあなたのニュースグループやフォーラムで活動していることを意味します。

アクティブもアクティブ。githubに上げたとこ。
 
6. Your OS project has a web site. The web site has a News section that is being kept up to
date, or links to a social network account used to announce updates of the project.
OSプロジェクトのWebサイトを持っていること。
Webサイトには最新情報が掲載されていたり、
最新情報を提供するSNSアカウントのリンクがあること。

Vectorでもよろしいか?
 
7. You release updated builds on a regular basis.
最新版が実行出来る状態になっていること。
ちょっと分かりにくい。。
 
 
OSライセンスの申請ページでは色々入力します。
実際に入力した内容は確かこんな感じでした。ちょっと小さくて見難いかも知れませんが。

f:id:koichi0814:20141214220315p:plain

 

3. ライセンスを貰いました

申請後直ぐにメールが来ました。

Hi Koichi,
 
Thank you for taking the time to submit your membership form. The RubyMine review board will evaluate your request over the next few days. We will make every effort to take care of this promptly and will notify you as soon as the review board has come to a decision.
 
If you wish to reply to this message, use the "Reply" button on your e-mail program. Please do not make any changes to the subject line, as this may lead to a long delay in responding to you.
 
Best regards,
JetBrains Team
http://www.jetbrains.com
"Develop with pleasure!"

超簡単に訳すと、
 
あなたが申請した内容を確認するのでまた連絡します。
 
ということのようでした。
 
このメールからが長かった。
待つこと3週間!
申請していたことすら忘れるぐらいの長さ。
国が違うから言葉の壁とかあったのかな?
配布サイトはVectorだし。
 
 
次のメールはこんな感じでした。

Hi Koichi,
 
I’m writing to you regarding your RubyMine Open Source license request. Please excuse our delay with replying you – due to vacations time (part of the staff is away). We have approved your request and issued a free OS license of RubyMine to your project. It will arrive in a separate message shortly. Please feel free to share this key with the project core team members (via secured channels only: please do not use a public forum or mailing list to share license keys).
 
The license will be valid for one year and is subject to all upgrades (including major ones) during this time. You may apply for renewal shortly prior to the expiration date by writing directly to opensource@jetbrains.com We hope that the license will become useful as the project grows.
 
Should you have any additional questions I’m happy to help.
 
Kind regards,
Elena Ganenkova
Community Support Coordinator
JetBrains,
http://www.jetbrains.com
"Develop with pleasure!"

超簡単に訳すと、
 
返事が遅れたことを許して下さい。
実は、休暇でスタッフが居ませんでした
 
私たちはあなたの要求を承認し、OSライセンスを発行しました。
この後メールが届くので、プロジェクトのメンバーと共有して下さい。
掲示板やメーリングリストには流さないで下さいね。
 
ライセンスは1年間有効で、この期間は全てのアップグレードが可能です。
ライセンスの延長は opensource@jetbrains.com 直接申し込んでもいいですよ。
 
他に何か質問があればどうぞおっしゃって下さい。
 
 
 
ヨーロッパ特有のバカンスかよ!
とも思いましたが、何はともあれライセンスキーが届いたので、
早速RubyMineに登録しました。
 
つたない英語でよく通ったなと思いましたが、
OSSを作っているとこういう所でラッキーな事もあるんですね。
 
 

4. そのライセンス大丈夫??

ライセンスを登録したものの、使い方もイマイチ分からないので、
そのまま起動することなく放置していましたが、このカレンダーを書くにあたって、
ふと思ったんですよね。
 
 
 
 
 
RubyMineのOSライセンスなのにRubyじゃないプロジェクトで
申請してもよいものかと。
 
申請は通ったんですがね。
 
 
 
 
 
私のgithubhttps://github.com/Koichi-Kobayashi)のリポジトリ一覧をご覧下さい。
 

f:id:koichi0814:20141214234017p:plain

 
C#です。
 
申請時のプロジェクトタイプにデスクトップアプリケーションが選べるから
Rubyじゃなくてもいいかなって思ったんです。
 
 
若干心配なので RubyMine の開発元である JetBrains に聞いてみました。
私はこのまま使わずじまいでライセンスの期限が来そうな気がしているんですが、
この記事を読んで、OSSを開発していれば何でもいいんだーって思われても・・・
という気がするので。
 
 
送ったメールはこれです。

To whom it may concern,
 
I am a person who previously got the OS license.
My OS project uses C#.
C# can't be used in RubyMine,
so even if it's used by the Ruby project made newly, is it no problem?
 
And can an OS license be used for a general commercial project?
 
Best regards,

私は以前OSライセンスを頂いた者です。
私のOSプロジェクトではC#を使っています。
RubyMineではC#は使えないので、
別のRubyプロジェクトで使用しても問題ないでしょうか?
 
それと、OSライセンスを商用プロジェクトに使用してもいいですか?
 
 
言いたかった内容をGoogle翻訳に通したものを再度日本語に翻訳しているので
大分変な日本語になっているような気もしますが・・・
 
 
今回の返信は早かったです。
時差も考えて深夜に送ったら翌朝には返信がありました。
 
 

Hello Koichi,
 
Thank you for contacting us.
 
The rules of our Open Source License Program are listed at the page:
https://www.jetbrains.com/ruby/buy/choose_edition.jsp?license=OPEN_SOURCE.
 
So, the OS license is granted to a particular project and cannot be used for
commercial purposes.
 
Your project's RubyMine OS license is valid till June 16, 2015. We cannot
cancel it or check how it is used. We trust our applicants and hope the
licenses are used for the Open Source development.
 
Should you have any further questions - I'm happy to help.
 
Have a great day)
Kind regards,
 
Nadya Kudryavtseva
Community Support Coordinator
JetBrains,
http://www.jetbrains.com
"Develop with pleasure!"

超簡単に訳すと、
 
ご連絡ありがとうございます。
Open Source ライセンスについては、こちらに記載しています。
https://www.jetbrains.com/ruby/buy/choose_edition.jsp?license=OPEN_SOURCE
このリンク、さっき見ました。。。

OSライセンスは特定のプロジェクトに対して与えられるもの
商用には使えません
 
あなたのプロジェクトの RubyMine OS ライセンスは2015年6月16日まで有効です。
私達はOSライセンスを無効に出来ませんし、どのように使われるかをチェックできません。
オープンソース開発のためにOSライセンスが使用されることを信じています
 
 

5. まとめ

RubyMineのライセンスについては、ライセンス比較表をよく読みましょう。
OSライセンスといっても、使える場面や用途が決まっています。
私の場合は AipoReminder というプロジェクトで申請しているので、
そのプロジェクト内で Ruby を使う分には使用出来そうですが、
現状は C# なので、実際には使えそうにもありません。
また、他のプロジェクトや商用にも使えません。。。
他のプロジェクトで AipoReminderApi というものを Ruby で作りましたが、
申請したプロジェクトとは違うのでダメな気がします。
 
このブログを読まれた方で、これからOSライセンスを取得しようとされるのでしたら、
gemの開発などに使うのがベストな気がします。
 
無料は色々面倒な事もあるので、
そういうしがらみの無い有料版を最初から選ぶ方が返って一番良いのかも知れません。

Goodbye Struts, Hello Java EE #javaee

これは Java EE Advent Calendar 2014 の3日目のブログエントリーです。
昨日は @irof さんの Java EEを説明してみる #javaee - 日々常々 でした。
明日は @kazuhira_r さんです。
 
 

はじめに

20年前の今日はプレイステーションの発売日でした。
来年はJavaが誕生してちょうど20年になります。
私が住んでいる神戸もある意味20年の節目の年を迎えます。
この20年の間に色々ありました。
ここ数年はIT技術の進歩がめざましく、とりわけWebの世界においては様々な言語やフレームワークが誕生しては消え(更新が途絶えたり)、Javaにとってはある意味混沌とした時代でもありました。
 
私はStrutsを10年ぐらいやっていました。それも1系を。
Javaが誕生してから半分の期間も!
Struts 1系は2013年4月にEnd Of Life(開発停止)が宣言されました。そもそも1系の最新である1.3.10がリリースされたのは2008年12月の事なので、事実上もっと前に終わっていた技術だと思います。
それでも企業で使われていたのはStrutsを使える技術者なら容易に集められたり、いわゆる枯れた技術(漠然とした安心感や根拠の無い使い古された技術だと安心)だったからなのではないでしょうか。

Strutsをやっていた10年余りの間にASP.NET(言語は何故かVB系ばかり…)をやっていたり、ベンダーの何とかフレームワークとか、何とかフレームワークとか何とかフレームワークを使っていたりしていました。
これらのフレームワークに一貫して言える事は、MVCモデルのVに当たるjspやaspxにロジックが入り込む事が往々にしてあったという事です。(最近のASP.NETはちょっと勉強不足なので、ここに書いている内容に当てはまらないかも知れません。)
 
 
前置きが長くなってしまいました。
今日は、Strutsぐらいしか知らない人がJava EE 7をやってみて良い意味で衝撃を受けたという事を書いてみようと思います。
(悪い意味では、もっと早くJava EE(6以降)に触れておけば良かったという後悔。。)  
 

ViewでJavaScriptを使うという事

一つの例を示したいと思います。
ユーザーの入力によって動的に計算する際にjQueryを使ってテキストボックスの値と隠し項目のhiddenの値を計算したり、一覧に行を追加したりする場合にDOMをjQueryから操作するのが本当に面倒でした。一回作ってしまえば、後は楽と思うかも知れませんが、仕様変更で項目が増減されたときもJavaScriptを修正しないといけない所が面倒でバグの原因にもなっていました。
 
次のレガシーなjspをご覧下さい。
数ヶ月前までStrutsを触っていたのに、改めて書いてみると結構うろ覚えなので間違っている所もあるかも知れません。

<input type="button" value="行追加" onclick="addrow()">
<table>
  <thead>
    <tr>
      <td>No</td>
      <td>品名コード</td>
      <td>品名</td>
      <td>倉庫コード</td>
      <td>倉庫名</td>
      <td>在庫数</td>
      <td>単価</td>
      <td>金額</td>
    </tr>
  </thead>
  <tbody>
    <logic:iterate id="item" property="productList" indexId="idx">
    <tr>
      <td>
        <bean:write name="idx" />
      </td>
      <td>
        <bean:write name="item" property="hinmeiCd" />
      </td>
      <td>
        <bean:write name="item" property="hinmeiNm" />
      </td>
      <td>
        <bean:write name="item" property="sokoCd" />
      </td>
      <td>
        <bean:write name="item" property="sokoNm" />
      </td>
      <td>
        <html:text name="item" property="zaikoSu" 
                   size="10" maxlength="3" 
                   onblur='calc(<bean:write name="idx" />)' />
      </td>
      <td>
        <bean:write name="item" property="tanka" />
      </td>
      <td>
        <html:text name="item" property="kingaku" 
                   size="10" readonly />
      </td>
      <input type="hidden" name="zaikoSuMax[<bean:write name='idx' />]">
    </tr>
    </logic:iterate>
  </tbody>
</table>

このテーブルは在庫数を入力すると単価と計算して合計を算出する事が出来、在庫の最大数とのチェックも行えます。
また、行追加ボタンを押すと一番下に新しい行が追加出来ます。
ただし、それらはJavaScriptを使って書いておく必要があります。
EclipseJavaScriptの入力補完が全く効かず、デバッグもし難いので書いては動かして書いては動かしての繰り返しが辛かった日々を想い出します。。。
もしかしたらNetBeansIntelliJではその辺りが充実しているのかも知れません。
 
少し調べてみるとEclipseでもJavaScriptのコード補完が出来るようですが、当時は知りませんでした。
JavaScript 開発環境の用意(Eclipse WTP/JSDT) | hiromasa.another :o)  
 

Viewが完全に切り離せる

Java EE 7 (JSF2.2) を使う場合は、JavaScriptを全く記述する事なく同じ事が出来てしまいます。
Java EE 6でも基本的に同じだと思います。) しかもAjaxを全く意識しなくても画面の部分的な更新が簡単に出来ます。
この2点がとても素晴らしいところです。
ロジック部分がJava側に集約されるのでJUnitでしっかりとテストが出来るという点も素晴らしいです。
 
次のxhtmlをご覧下さい。
(実際に動かしていないので、間違っている部分もあるかも知れません。。。)
hから始まるタグはJSF標準のタグで、pから始まるタグは PrimeFaces というJSFベースのリッチUIコンポーネントです。
見た目が凄く綺麗になりますし、本当にリッチなUIが使えます。
jQueryプラグインで部分的にリッチにしてしまってアンバランスなUIを構築してしまうという痛恨のミスも最早過去の話です。

<h:form id="form">
  <p:growl id="msgs" showDetail="true" />
  <p:outputPanel id="panel">
    <p:commandButton value="行追加" 
       actionListener="#{zaikoViewModel.addRow}" 
       update=":form:panel, :form:msgs" />
    <p:dataTable var="item" value="#{zaikoViewModel.details}" 
       rowIndexVar="rowIndex">
      <p:column headerText="No">
        <h:outputText value="#{rowIndex+1}" />
      </p:column>
      <p:column headerText="品名コード">
        <h:outputText value="#{item.hinmeiCd}" />
      </p:column>
      <p:column headerText="品名">
        <h:outputText value="#{item.hinmeiNm}" />
      </p:column>
      <p:column headerText="倉庫コード">
        <h:outputText value="#{item.sokoCd}" />
      </p:column>
      <p:column headerText="倉庫名">
        <h:outputText value="#{item.sokoNm}" />
      </p:column>
      <p:column headerText="在庫数">
        <h:inputText id="zaikoSu" value="#{item.zaikoSu}" >
        <p:ajax event="blur" listener="#{zaikoViewModel.onBlur}" 
           update=":form:panel, :form:msgs" />
        </h:inputText>
      </p:column>
      <p:column headerText="単価">
        <h:outputText value="#{item.tanka}" />
      </p:column>
      <p:column headerText="金額">
        <h:outputText value="#{item.kingaku}" />
      </p:column>
    </p:dataTable>
  </p:outputPanel>
</h:form>

先ほどのjspJSFに書き換えるとこうなります。
個人的にはテーブルのヘッダー部分とボディー部分を一緒に書ける所が直感的で良いなと思います。
 
このxhtmlにはhiddenが書かれていません。
代わりにp:ajaxというタグがあり、listenerで指定したzaikoViewModelクラスのonBlurメソッドが呼び出される仕組みがあります。
eventに指定したクライアント側のイベント実行時にformで囲んだ値がサーバー側に送信され、メソッド内での処理が終わるとupdateで指定したコンポーネントが更新されます。
これぞまさしくStruts時代に憧れていたAjaxです。
 
もう一つ、行追加ボタンについて。
こちらもボタンが押されたときにactionListenerで指定したクラスのメソッドが呼ばれ、updateで指定したコンポーネントが更新されます。
行追加と言っても、Java側でdetails(大体がArrayList)に空のオブジェクトをaddすれば完了です。
たったそれだけで行追加が出来ます。
もうjQueryでDOMをこねくり回す必要はありません。

JavaScriptでやっていた計算やDOMの操作がJSFを使う事によってJava側で出来てしまうのです。

Java EE 6以降をご存知の方には当たり前だと思いますが、知らなかった私はかなり衝撃を受けました。
これって意外と知らない人多いんじゃないかと思います。
(知ってたらJava EEが流行ってる気がするので。)
(技術系の記事によくあるサンプルだと実際の業務システムイメージが付きにくいという事もあるのかも知れませんね。)
 

業務システムでもUXを

今までjQueryを使って部分的にリッチになっていたり、いまいちパッとしない業務システムの画面もPrimeFacesを使う事でシステム全体が同じデザインで統一されます。デザインを変更するテーマファイルも結構あるので、気に入るものがきっとあると思います。
エンタープライズ系のシステムもエンドユーザー向けのシステムと同じようにとことんUXに拘ってもいいのではないでしょうか。
洗練されたUIはとても使い勝手が良く、おそらくソースも綺麗でしょう。
 
UXに関してちょうど良いタイミングで記事が出ていましたね。

 
 

まとめ

Java EEを使うとAjaxが簡単に使え、PrimeFacesと組み合わせる事でリッチなWebシステムが構築出来ます。
もうJavaScriptで無駄な時間を消費することもありません。
Viewにロジックが入り込まないため、JUnitを使ったテストで充分網羅出来ます。(Excelにエビデンス貼り付けるの止めようよ。)
JUnitとの相性も良いということは仕様変更にビクビクする事もありません。
簡単に再テスト出来るし、何より自分で書いたコードでテストが完了するので安心感もあります。
Java SE 8もあるので、ラムダとStream APIでコーディングが楽しくなるということも言っておきます。
 
jspベースなフレームワークを使っているという人が居るなら、マイグレーションの際にはJava EE 7を断然オススメします。
使い勝手も悪く工数も掛かるフレームワークはどんどん淘汰されて行くでしょう。
 
 

おまけ

先日、関ジャバに初めて参加しました。
 
 
Javaエンジニア養成読本にサイン貰いました。
写真大きいままですけど。。。

f:id:koichi0814:20141203004353j:plain

 
 
本の内容はこちらにあります。

WildFlyの管理画面にアクセス出来るようにする

[前提]
Mac OS X Yosemite
WildFly 8.1.0
 

管理画面のURL

WildFlyの管理画面へのアクセスは次のURLでいいのですが、いきなりアクセスしても設定が必要と言われてしまいます。  

http://localhost:8080/consolef:id:koichi0814:20141123055201p:plain

設定は簡単

add-user.sh を実行するだけです。

$WFLY_HOME/bin/add-user.sh 

f:id:koichi0814:20141124101011p:plain

 

再度管理画面にアクセス

http://localhost:8080/consolef:id:koichi0814:20141124100520p:plain

先ほど設定したユーザー名とパスワードを入力してログインします。

f:id:koichi0814:20141124101028p:plain

WildFlyよくある質問 - 管理GUI に設定方法が書かれていましたが、8.1.0では若干違うようです。
https://developer.jboss.org/wiki/JBossAS7WildFlyFAQJapanese?_sscc=t#jive_content_id_GUI

Visual Studio 2013 Express を入れたまま Visual Studio Community 2013 はインストール可能だが、日本語パックを入れると警告が・・・

分かっていましたけどやってみました。
Program Filesを見てみるとExpressがインストールされていた所に上書きされた模様。

f:id:koichi0814:20141115042908p:plain

スタートメニューにもExpressが残りつつ、Community版が出ています。
Visual Studio Community 2013 という名前ではなく、Visual Studio 2013 となるようです。

f:id:koichi0814:20141115043032p:plain

コントロールパネルのプログラムの一覧もこんな風に・・・

f:id:koichi0814:20141115043244p:plain

憶測の域を出ないですが、 Express版が参照している数々のDLLがCommunity版によって置き換わっているような気がするので、この状態でExpressで動かすと色々問題が出てきそうな気がします。(一応、どちらも起動しました。)
Community版の方がExpress版よりもアドインが使えるなど強化されているし、もうExpress版を使う必要もないと思うので、Express版をアンインストールしてからCommunity版をインストールした方が精神衛生上も良いかも知れません。

日本語パックをインストール

やっぱり同じ場所にインストールされるため不都合が事があるようで。。。

f:id:koichi0814:20141115045418p:plain

警告はOKボタンを押すしかないので、押してみるとインストールは続行されて・・・

f:id:koichi0814:20141115051725p:plain

ほんまかい!怪しい。実に怪しい。
内部がぐちゃっとしてる感満載。
 
Community版を起動すると、日本語パックを入れているのにも関わらず英語で起動しますが、TOOLS > Options > Environment > International Settings で日本語を選択して再起動すると日本語が有効になります。
 
一応、Express版を入れたままCommunity版も入れられましたが、やっぱりExpress版をアンインストールしてからの方が良い気がします。
 
後からアンインストールしてもちゃんと消せるようです。

f:id:koichi0814:20141115054827p:plain