Medley Developer Blog

株式会社メドレーのエンジニア・デザイナーによるブログです

COBOLとORCAについて学ぶお話

※本投稿はMEDLEYオフィシャルブログから転載したものです。元記事はこちら。

info.medley.jp

TechLunchでCOBOLORCAについて話しました

開発本部の竹内です。病気事典MEDLEYの開発を担当しております。子どもが絶賛イヤイヤ期中です。
さて先日、TechLunchという社内勉強会にてCOBOLORCAについての発表を行いましたので、その紹介をさせていただきたいと思います。

はじめに

COBOLとは?ORCAとは?の前に、「なぜ今回このテーマを選んだか」について簡単に説明させてください。

株式会社メドレーでは「医療ヘルスケア分野の課題を解決する」ために各サービスの開発・運営を行っています。
しかし、「医療ヘルスケア分野」のサービス開発・運営を行っていると言っても、実際の開発現場では一般的なWebアプリケーションやスマートフォンアプリケーションの開発を行うことが多々あります。
そのため、日々の仕事において「医療ヘルスケア分野」で業務を行っていると意識しないこともあります。
せっかく「医療×IT」の会社にいるわけなので、エンジニアとして医療に深く関わるソフトウェアについて勉強してみるのも面白いのではないか、と思ったことがテーマの選択につながっています。
また、医療ヘルスケア分野でOSSとして公開されている代表的なものとしてORCAの「日医標準レセプトソフト」がある、というのもテーマ選択の理由の一つです。
どんなソフトウェアにせよそれがOSSであれば、コードが公開されているため勉強を始めるハードルはかなり下がるため、です。

ORCAとは

ORCAプロジェクトとは、医療情報ネットワーク推進委員会にて「医師会総合情報ネットワーク構想」(1997年 情報化検討委員会)を構成するツールの一つとして認められた日本医師会の研究事業プロジェクトです。 ORCA Project: ORCAプロジェクトの概要

ORCAとは日本医師会のプロジェクトで、国民医療を改善するために医療情報の効率化・標準化を推進するために、医師・医療関係機関が無料で利用・改良できるOSSを配布しています。

現在、診療報酬を請求するための専用コンピュータ(=レセコン)は、全国の医療機関の内8割以上が使用しているそうです。ORCAプロジェクトでは「日医標準レセプトソフト(=日レセ)」というOSSが公開されています。

OSSなのでもちろんコードは公開されており、その他の技術情報も下記リンク先に詳細が掲載されています。 ORCA Project: 技術情報

f:id:medley_inc:20170417154614p:plain

COBOLとは

さて、上記リンク先を見いくと日医標準レセプトソフトのコードはCVSで公開されており、その中を見てみるとCOBOLのコードがあることがあわかります。
個人的にCOBOLについては、「名前は聞いたことあるけど、文法など詳細は知らない割になぜか良い印象を持っていない」という状態でした。
レセコンのロジックを勉強するにあたり、ついでに未知の言語であるCOBOLも勉強してみよう、という軽いノリで調べはじめました。

勉強会ではCOBOLの基本的な文法にフォーカスして紹介しています。
また、今回はCOBOLの実行環境としてDockerを利用しています。

  • COBOLによるHELLO, WORLD
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO_WORLD.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
  DISPLAY "Hello, COBOL".
STOP RUN.

ORCAのコードについて

上述の通り、ORCA(日レセ)のコードはCVSで管理されているため、Macでは次のようにしてコードを取得できるかと思います。

# 参考:https://www.orca.med.or.jp/receipt/tec/cvs-jma-receipt.html
# リポジトリ取得
$ brew install cvs
$ curl http://ftp.orca.med.or.jp/pub/data/receipt/tec/orcacvs > ~/bin/orcacvs
$ chmod +x ~/bin/orcacvs
$ cvs -d :ext:anoncvs@cvs.orca.med.or.jp:/cvs co jma-receipt

実際のCOBOLのコードはcobolというディレクトリに入っています。
http://cvs.orca.med.or.jp/cgi-bin/cvsweb/jma-receipt/cobol/

見てみると、ファイルを開いてコメントを確認するまでどれがどういう用途なのかよくわかりませんでした。
ファイル内のコメントにある「コンポーネント名」とcvswebのURLを対応付けたmarkdownを作成しましたので、興味がある方は見てみてください。

https://github.com/ise/orca-jma-receipt-study/blob/master/cobol.md

f:id:medley_inc:20170417154633p:plain

まとめ

TechLunchでORCACOBOLについて紹介しました。
軽い気持ちで調べはじめましたが、
「レセコンがOSSで配布されている」ということにまず衝撃を受け、
ORCA(日レセ)のコードがCVSで公開されている」ということにも衝撃を受け、
「コードがCOBOLである」ということにさらに衝撃を受けました。
が、同時にOSSが日本の医療を支えていることに胸が熱くなりました。技術スタックが古くとも、とても素晴らしいことだと思いました。

また、リニューアルPJもあるようで、今後の動向が興味深いですね。
ORCA次期FW開発の現状 (少し古い資料ですが)

COBOLについても、調べはじめるとなかなかに興味深い言語でしたが、やはり基本文法を理解しただけではレセコンのコードを読んで理解するまでには至りませんでした。。発表資料でも触れましたが、日レセを構成するミドルウェアであるMONTSUQIについても、ある程度理解する必要があると感じました(俺たちの戦いはこれからだ、、)

さて、医療に関わるソフトウェア&(個人的に)未知の技術であるCOBOLに触れ、心が豊かになったところで今回のブログを締めさせていただきたいと思います。
ここまでお読み下さり、どうもありがとうございました。

※勉強会資料は下記

最後に

メドレーでは、医療ヘルスケア分野の課題を解決するため、未知の言語や技術を恐れない勇気あるエンジニアを募集しています。

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.medley.jp

社内勉強会TechLunchでECMAScriptについての発表をしました

※本投稿はMEDLEYオフィシャルブログから転載したものです。元記事はこちら。

info.medley.jp

こんにちは、開発本部エンジニア平木です。

弊社では定例でTechLunchという社内勉強会を開いています。今回は自分が担当になったので、最近の動向も含めてECMAScriptについて話をしました。

なぜECMAScriptについて話そうと思ったのか?

ご存知の方も多いでしょうが、ECMAScriptとはJavaScriptの仕様になります。

ここからは個人的な印象になりますが、つい数年前までは特にフロントエンド開発をする人でも仕様のことを意識しなくてもあまり問題はなかったと思います。

しかし、BabelやTypeScriptなどが普及しだしてきたあたりから、ブラウザの実装に関係なくECMAScriptで提案されている仕様が使えるようになり、段々とECMAScriptについて知っておいた方が開発効率が上がる…ということになってきたかと思います。

最近ですと、特にBabelを使う前提のReact.jsなどが一般に使われてきていますので、そういった開発をするときにECMAScriptの仕様がどのように決まって次の仕様にはどういった機能が取り込まれるのかを知っておくと開発がしやすくなるのではないかと考えています。

弊社でもちらほらと、ECMAScript2015以降を使うようになってきているという事情もあり、ここらで情報が追いやすくなってきているECMAScriptについて興味を持ってもらおうという意図で題材に選びました。

f:id:Layzie:20170303120548j:plain

話す内容で考えたこと

このような思いから、題材は決まったのですが、いきなりECMAScriptについて話しだしても全然わからないよねということになります。

以前にMeguro.es #1というイベントでECMAScriptについてLTをさせてもらったのですが、イベントの性質上前提をすっ飛ばして話した感じでした。

しかし、弊社のエンジニア陣は今でこそフロントエンドも実装していますが元々はバックエンドなどフロントエンド以外出身のエンジニアが多いので、本題のなぜECMAScriptの次の仕様が追いやすくなったしキャッチアップしていこう!という点がピンとこない可能性があります。

前提としてそもそもJavaScriptの歴史や、ECMAScriptが策定される経緯などから話さないといけないかも…と色々盛り込んだ話をしたのですが、結果としてはちょっと本題がボヤけてしまった感じがあり反省しています…。

スライドはこちらになります。

スライドには入れられなかった部分

時間の都合で話したかったけど入っていないことを2点ほど。

Babelについて

TechLunchの発表では、構成上入れていなかったのですが、弊社のプロダクトでいうとJavaScriptを結局はBabelを使ってトランスパイルするという形がほとんどです。

基本のES2015の機能についてはLearn ES2015 · Babelyosuke-furukawa/tower-of-babelなんかで覚えることができると思います。

しかし、極端な例でいうとBabelのプラグインStage 0 preset · Babelを使ったりするとさらに便利(かもしれない)機能が使えるようになります。このプラグインで使える機能は何か?というのを調べるとなると、やはりtc39/proposalsなどを見たほうが早いということになります。

次にどんな機能が来るなどの情報はこの発表の内容などを知ってるとキャッチアップしやすくなると思います。

詳しい情報源について+α

参考情報として載せたなかで個人的に 早い・分かりやすい・詳しい を兼ねそなえているのが Dr. Axel Rauschmayer2ality – JavaScript and moreかなと思っています。

英語が苦でなければこの人のブログを読んでるだけで実用上問題ないくらいにECMAScriptの動向についていけます。

この方のJavaScript / ECMAScript 関連の本もすばらしいので、これまた英語が苦でなければぜひ読んでください。

ちなみにこの方はES.next News: 5 ECMAScript.next links, every weekというメーリングリストも運営しておりこちらは粒度としては1週間に1回になるんである意味読みやすい情報かもしれません。

日本語ですと、ECMAScriptだけではないですがやっぱりazuさんのJSer.infoがよいかと思います。

まとめ

ECMAScriptについての勉強会を開催したお話でした。メドレーでは、ECMAScriptの仕様読むの大好物!というような方もぜひ来ていただきたいと思っています!!

また 4/19(水)に筆者が携わっているCLINICSについて話すイベントを開催します。

mednight.connpass.com

フロントエンドのことについて話す予定ですので、ご興味あればぜひご参加ください!

求人情報

メドレーではエンジニアを積極採用しています! ご応募お待ちしています。

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.medley.jp

AWSサービスを用いた今後のバッチ処理のお話〜開発本部・TechLunch〜

※本投稿はMEDLEYオフィシャルブログから転載したものです。元記事はこちら。

info.medley.jp

オンライン診療アプリ「CLINICS」を開発している田中です。

本日は、メドレー開発本部にて隔週で行われている勉強会(TechLunch)で、今後のバッチ処理構成の1つとして活用できそうなAWSサービスの紹介を行ったので、その一部を紹介したいと思います。

背景と勉強会の目的

メドレーでのバッチ処理

メドレーの各プロダクトは環境として主にAWSを使用しており、いわゆる「バッチ処理」(時間起動でのデータ一括処理系)については、スケジューラとして使用しているJenkinsからバッチ用EC2インスタンス上のバッチ処理をキックする、という構成が多いです。

(短時間で完了し、ワークフロー自体シンプルなバッチについては、スケジューラにLambdaを利用する構成も増えてきました)

その他、SQSを用いたキューイング処理、Kinesis/Lambdaを使用したログストリーミング処理など様々な構成で動いています。

勉強会の目的

現状、プロダクトを運用する上でバッチ処理で何か課題があるかと言えば特には無いのですが、下記を目的として勉強会を行いました。

今後各プロダクトを跨ぐ共通基盤システムなどでバッチ処理が必要になった場合など、出来るだけ人の手間を減らしたい場合に備え、選択肢の1つとしてバッチ向けサービス(AWS Batch、Step Functions)の紹介を行いました。

また、広義の意味でのバッチ処理/狭義の意味でのバッチ処理という整理で、一括系処理系、ストリーミング/キューイングなどの(ほぼ)リアルタイム系の違いやよくある構成についての説明も行いました。

勉強会の内容

メドレーでは様々なバックグラウンドをもったエンジニアが集まっており、フロントエンドやネイティブは得意だけどサーバーサイド/インフラはまだ慣れていないエンジニア向けに、そもそもバッチ処理とは?という内容から始めました。

  • バッチ処理の概要、よくあるシステム構成
  • バッチ処理設計時のポイント
  • ここ最近のバッチ関連の流れ(リアルタイム化)
  • 各プロダクトのバッチ構成の例

次に、今後使えそうなAWSのサービスとしてAWS BatchとStep Functionsの概要について説明しました。

  • AWS Re:Invent 2016で発表されたAWSのbatch処理系に使える新サービス
  • AWS Batch
    • フルマネージド型のバッチ処理行基
    • 必要なリソース(CPU、メモリetc)を定義すれば、AWSが必要に応じてECS上で実行(インスタンスタイプ、分散用に台数確保)
    • ジョブとして登録したアプリやコンテナイメージを実行
  • Step Functions
    • Lambaなどの複数アプリをワークフローとして定義、実行(ビジュアル化)
    • 今まではLambda to Lambdaや、SQSを介すなど自分で考慮必要だったワークフロー(分岐、繰り返しなど)をJSONで定義しサービス化

※ 発表資料は以下

最後に、簡単にですがStep Functionsを実際に試した内容と、個人的な感想を共有しました。

  • Pros
    • 既存のLambdaをそのまま使用できる
    • フロー定義や実行結果がビジュアルで確認できる
    • 同じLambdaを別々のState Machineで使えるので汎用性、再利用性が高まる
  • Cons
    • ワークフローが複雑になると、タスクのJSON定義がけっこう手間(Step Functionsに限った話ではないですが、、、)
    • トランザクション的な管理、設計の勘所がけっこう必要になりそう

まとめ

メドレー開発本部の技術勉強会(TechLunch)で発表した内容の一部を紹介しました。

メドレーでは各技術の選択基準として、適材適所という考えを大事にしています。そのため、新技術/新サービスを使用すればいいと言う訳ではなく、今回の内容に関連して言えば、あえてベーシックにバッチインスタンスを立てて、という構成も適材適所であれば問題ないと考えています。

適材適所を効果的に行うためには、日々、新技術も情報として押さえ蓄積していく事が重要だと思うので、INPUTの一環として今後も「TechLunch」を更に活用していきたいと思います。

お知らせ

CTO平山のブログが本日公開となりました。 記念すべき第一回目は、「医療×インターネットの未来」がテーマ。 ぜひ読んでみてくださいね。

toppa.medley.jp

また、CTO平山とのランチ会を定期開催予定です。 ご興味ある方はぜひエントリーください! www.wantedly.com

求人情報

メドレーではエンジニアを積極採用しています! ご応募お待ちしています。

www.wantedly.com

www.wantedly.com

www.medley.jp

「メタプログラミングRuby」ことはじめ〜開発本部・TechLunch〜

医療介護の求人サイト「ジョブメドレー」の開発を担当している後藤です。

メドレー開発本部にて隔週で行われている勉強会(TechLunch)でメタプログラミングRubyをベースにメタプログラミングRuby入門について発表したのでその一部を紹介したいと思います。

メドレーとRuby

弊社では「CLINICS」、「ジョブメドレー」、「介護のほんね」と複数のプロダクトでRuby on Rails を利用しています。

スタートアップでそこまでエンジニアの数が多くないなか、エンジニアが最大限にプロダクトにコミットするために、もともとのバックグラウンドがフロントエンドエンジニアだったり、ネイティブアプリエンジニアだったりする方もRuby on Railsのコードを書いています。

Ruby on Railsはとても便利なフレームワークで、周辺の便利なライブラリや解説記事が整っていることもあり、必要な機能は検索すればあまり中身を理解せずとも実装できてしまったりもします。ただ、何か問題があった時のために利用しているフレームワークの処理を把握しておくことはとても重要です。そして、フレームワークソースコードを読み解くにはやはりRubyの言語仕様の知識が重要になってきます。

また、Rubyの言語仕様、そして使っているフレームワークの深い理解があることでよりメンテナンスしやすい設計・実装がしやすくなるのも事実だと思います。

こういった背景のもと、社内のエンジニアのRubyに対する知見を深めることはとても価値があると感じ、「メタプログラミングRuby」をベースにメタプログラミングRuby入門の勉強会を開催しました。

メタプログラミングRuby入門

今回はメタプログラミング入門ということでRubyメタプログラミングをする上で必要なRubyの言語仕様の話と一つの例としてmethod_missingの話を取り上げました。

Rubyのオブジェクトモデル

このRubyのオブジェクトモデルという言葉は「メタプログラミングRuby」から拝借しています。本の中では「このメソッドはどのクラスに所属するものなのか?」「このモジュールをインクルードしたら何が起きるのか」といった質問の答えが見つかる場所と記載しています。このオブジェクトモデルには以下のようなルールが存在します。

  1. オブジェクトは1種類しかない。それが通常のオブジェクトかモジュールになる。
  2. モジュールは1種類しかない。それが通常のモジュール、クラス、特異クラスのいずれかになる。
  3. メソッドは1種類しかない。メソッドはモジュール(大半はクラス)に住んでいる。
  4. すべてのオブジェクトは(クラスも含めて)「本物のクラス」を持っている。それが通常のクラスか特異クラスである。
  5. すべてのクラスは(BasicObjectを除いて)ひとつの祖先(スーパークラスかモジュール)を持っている。つまり、あらゆるクラスがBasicObjectに向かって1本の継承チェーンを持っている。
  6. オブジェクトの特異クラスのスーパークラスは、オブジェクトのクラスである。クラスの特異クラスのスーパークラスはクラスのスーパークラスの特異クラスである。
  7. メソッドを呼び出すときは、Rubyはレシーバの本物のクラスに向かって「右へ」進み、継承チェーンを「上へ」進む。Rubyのメソッド探索について知るべきことは以上だ。

(メタプログラミングRuby第2版 より)

BasicObject#method_missing

Rubyでメソッド呼び出しを行った際のフローは以下になります。

  1. Rubyはレシーバーの本物のクラスに向かってメソッド探索を始める
  2. 継承チェーンをBasicObjectまで辿っても呼び出したメソッドが見つからなかった場合、Rubyはレシーバーのmethod_missingを呼び出す
  3. メソッド探索でmethod_missingが見つからなかった場合、BasicObject#method_missingが呼び出され、例外が投げられる

この仕組みをうまく使って、BasicObject#method_missingが呼び出される前に自前のmethod_missingメソッドを呼び出すようにして動的にメソッドを定義したり動的な振る舞いをオブジェクトに加えたりすることができるのです。

勉強会の様子

ここまでお話しした内容を含め、勉強会では以下の内容を発表しました。

発表資料はこちら

発表時の個人的な裏テーマとして「あまりRubyが得意でない方にメタプログラミングRubyを読みたくなるようにさせる」というものを設定していましたが、実際の発表後にちらほらメタプログラミングRubyの話が出ていたので発表した甲斐がありました。

まとめ

今回はメドレー開発本部の技術勉強会(TechLunch)で発表した内容を紹介しました。

勉強会では、まずRubyの言語要素とメソッド実行の理解を深め、その上でBasicObject#method_missingを理解し、それを使ったgemのコードを読み進めました。

実際にRubyでのメタプログラミングに触れることでRubyへの知見が深めていけたかと思います。 メドレー開発本部で実施している「TechLunch」での発表内容は今後も定期的に紹介していくので、是非メドレーブログをチェックしてみてください。

求人

メドレーではエンジニアを積極採用しています! ご興味のある方、ぜひご応募ください。お待ちしています。

www.wantedly.com

www.wantedly.com

www.medley.jp

プロダクトへの「思い」を大切にし続ける開発チームを目指して〜メドレー開発本部合宿@まるも〜

※本投稿はMEDLEYオフィシャルブログから転載したものです。元記事はこちら。

info.medley.jp

こんにちは、オンライン病気事典MEDLEYの開発をしてます徐聖博です。
先日、開発本部のメンバーで千葉県の「まるもかぢや旅館」で合宿を行いました。

marumo.net // 『まるもの開発合宿プラン』を利用

今回は、開発本部で合宿を行った背景や、合宿の内容の紹介をしていきます。

背景

ストイックすぎる大人たち

メドレーはスタートアップ企業の中では比較的年齢層が高く、一部からは「大人のベンチャー」と呼ばれることもあります。
中でも開発本部に関してはメンバー17人中、20代は自分を含めて3人しかおらず、基本的に30代中盤の「大人(おっさん)」が集まる部署です。

www.wantedly.com // 開発本部の“ツートップ”による対談。

普段はゆるく気さくな「大人」たちですが、仕事ではとことん真剣にプロダクトと向き合っています。

例えば、昨年5月に行った開発合宿では、昼に集合し途中夕食・ボーリングを挟み深夜1時ごろまで開発し、次の日は朝ごはんを食べて開発、昼ごはんを食べて開発。

info.medley.jp // 昨年5月末に『おんやど恵』で行った開発合宿。

温泉に行ったにも関わらず2日間みっちり開発し、時間の限り最後までクオリティにこだわりやりきりました。

成長してゆく組織

そんな合宿を行った昨年の5月末の12人から、メドレー開発本部には新たに5人のエンジニア・デザイナーが加わり合計17人体制になりました。 オンライン診療アプリCLINICSのiOS版・Android版もリリースし、プロダクトの数も増え、そして社員数が約1.5倍になるなど会社全体としても成長をしました。

会社の成長に伴い開発の業務が細分化し、「席は近いけど、やってることは全然違う」というような状況が増えました。
また、個人のプロダクトに対する思いを共有する場も日常の業務では少なくなってきました。

メドレーにおけるプロダクトは、一つひとつ「思い」があり、その「思い」によって生まれたプロダクトです。
そのため、同じ部署のメンバーが互いにどのような思いでそのプロダクト開発しているかを知りながら働くことは、とても大切なことだと考えています。

medley.life // 正しい医療の情報を発信し、病気で不安を感じる人を一人でも減らしたい「思い」で生まれたMEDLEY

こうした背景の中、「リフレッシュ・コミュニケーション」をテーマに開発本部合宿を行いました。

何をやったか

今回、行った先は千葉県富津市

当日は強風に見舞われ、当初予定していた海釣りから予定変更し、鋸山へと行きました。

鋸山は標高329.4mと、決して高くはありません。
しかし、登ってみると意外と階段が多く、普段おっさんたちが発しないような声色で「つらい」・「え、まだ登るの?」と音を上げながらもなんとか巡回コースを歩きました。
各々プライベートことも含め語り合いながら、そして苦労の末に山頂にたどり着き、そこで撮った集合写真はみなとてもいい笑顔で登ってよかったと思いました。

f:id:yamadagenki:20170208113439j:plain
// 名物の地獄覗きを体験。撮影は高所恐怖症の不惑エンジニア
f:id:yamadagenki:20170208113501j:plain // 鋸山山頂で撮った記念写真。半分以上のメンバーは翌日筋肉痛になりました。
f:id:yamadagenki:20170208113522j:plain // おみくじを引き、今年の運勢を占ったり。
f:id:yamadagenki:20170208113559j:plain // 男が15人でBBQをすれば、当たり前のように肉の争奪戦が始まります。メシに上下関係なんてありません。

日々オフィスにこもりストイックに仕事をする開発本部メンバーにとって、山に登り体を動かしたり、バーベキューで肉の取り合いをすることは良いリフレッシュになったのではないかと思います。

今後へ向けて

「リフレッシュ・コミュニケーション」がテーマであるものの、ただリフレッシュし、コミュニケーションを取るだけが今回の目的ではありません。
メドレーという会社が目指す未来を実現するために、開発本部の今後のロードマップを定めることも直近のテーマです。

夜は、まるもにて「これまでの開発本部の道のり」と、そして「これからの開発本部がどうあるべき」か、
そして「株式会社メドレーが運営する4つのプロダクトをどういう気持ちで成長させていくか」ということに関してCTOの平山がその熱い胸の内を共有しました。

f:id:yamadagenki:20170208113659j:plain // 平山の発表を真剣に聞くメンバーの様子。

発表は、2015年から2017年の現在にいたるまでのメドレー開発本部の動きがまとめられている資料で、個人的に今までやってきたことを思い出し感慨深く感じました。
中でも、熱い思いが込められたこの一枚のスライドがとても印象に残っています。
ちょっと、内緒で拝借してご紹介します。

f:id:yamadagenki:20170207185100p:plain
// 平山の思いが込められたスライド。しっかりとメンバーの胸に刻み込まれました。

そのあとは、メンバー各々プロダクトへの思いや最新の技術の話題など、夜遅くまで真面目に、且つ面白く語り合っていました。

まとめ

今回はリフレッシュとコミュニケーションをテーマに、千葉県で合宿を行いました。

鋸山で山登りをし、まるもで夜遅くまでプロダクトに対する思いについて語り合い、リフレッシュもコミュニケーションもしっかりできました。
帰りは若干眠そうでしたが、みなスッキリした顔で解散し、良い合宿だったなと思いました。
今後も定期的に合宿を行い、プロダクトへ対する思いを共有し、その思いを大切にしながら開発していきたいと思いました。

最後に

今回企画してくれた新居さん、ありがとうございます!!!

f:id:yamadagenki:20170208113720j:plain // 恒例(にしていきたい)の到着直後の新居さんピース

開発環境にDockerを導入し開発を効率化する話〜開発本部・TechLunch〜

※本投稿はMEDLEYオフィシャルブログから転載したものです。元記事はこちら。

info.medley.jp

口コミで探せる介護施設の検索サイト「介護のほんね」を開発している新居です。 本日は、メドレー開発本部にて隔週で行われている勉強会(TechLunch)で、Dockerの発表を行ったのでその一部を紹介したいと思います。

f:id:medley_inc:20170131212540p:plain

メドレーとDocker

弊社ではオンライン病気事典 MEDLEY(メドレー)の運用でDockerが使われています。 2015年2月のリリース時から開発環境〜本番環境の全てでDockerが使われており、開発運用を通じてノウハウも少しずつ貯められています。

一方、私が以前関わっていた「ジョブメドレー」の中で感じていた課題として、

  • 開発環境の構築で時間がとられる
  • たまにMacのOS(オペレーティングシステム)が新しいと、あるライブラリがインストールできなくなってしまう
  • 本番環境で使っているnginxの設定を弄りたいがテストしにくい

などがありました。

事業規模が大きくなっていくにつれエンジニア個々の時間の使い方も大事になっていきます。 頻度は少ないものの開発環境の構築で時間を無駄にしてしまったり、本番環境の稼働を止めてしまったりすることは事業に与える影響も大きくなってきます。

こうした課題意識が、自分の勉強も踏まえて「ジョブメドレー」の開発環境をDocker化してみるという取り組みに繋がりました。 さらにその勉強の中で得た知見を社内の勉強会でアウトプットすることで、また開発環境構築時にメンバーがDockerに触れる機会を作ることで技術の理解や底上げに繋がることを狙いました。

Dockerとは

エンジニア界隈ではお馴染みのDockerですが、このブログは医療従事者やエンジニア職ではない方もご覧になられていると思いますので、Dockerの説明を簡単にしておきます。

www.docker.com

Dockerとは、ひとことでいうと「Linux上で動作するシンプルで使いやすい軽量コンテナ環境」です。 LinuxというOS上にコンテナという箱を用意し、そのコンテナの中に必要なソフトウェアやライブラリ(ツール)などをインストールしてひとつのまとまりとしてパッケージングすることができます。

これにより、

  • ウェブサービスなどが動作する環境をポータブルな環境にすることができ、開発環境や検証環境、本番環境でまったく同じ環境を作ることが容易になる
  • これまでのような開発環境と本番環境の微妙な違いによる動作の不具合や、開発環境では動いていたのに本番にデプロイしたら動かなくなりましたといった問題から解放される
  • エンジニアの精神的な不安も幾分か軽減される

といったメリットを享受することができるようになります。

また、新しいメンバーやディレクターのPCでDockerが動く状態になっていれば開発環境を構築するのも格段に楽になります。 PCのOSの違いなどによるライブラリがインストールできないといった問題で時間を奪われることもなくなるでしょう。

このようにできるだけ簡単な言葉でDockerを説明してみましたが、Dockerのようなコンテナ型仮想化技術というのは古くからあり、Dockerを提供するDocker社のFAQページではそれら(ここではLXC)との違いが説明されています。

docs.docker.com

勉強会の内容

冒頭でも述べましたが、弊社ではMEDLEYの開発運用でのみDockerを使っているため、自分も含め他サービスの運用メンバーでDockerに慣れていない人もいます(もちろん個人や前職でDockerを触っていたメンバーもいますが)。

メンバーが増えてくるにつれ個々の技術レベルにも差が生まれてくるので、そういった差を埋めるためにも今回はDocker初心者向けに基本的な話と既存のRailsプロジェクトをどのようにDocker化していくかといった話をしました。

実際の内容としては、

  • Docker、コンテナとは?
  • Docker for MacによるDocker環境の構築
  • Docker Machine
  • Docker Compose
  • xhyve
  • Kitematic
  • コンテナの作り方
  • Dockerfileの作り方
  • Docker Composeによる複数コンテナの管理
  • ジョブメドレーの開発環境をDocker化する話

といった内容で発表を行いました。

Docker for Macについては2016年7月に正式版がリリースされ、それまでのDocker ToolboxによるDocker環境構築に比べて幾分か楽になり、Docker Toolboxからの移行も簡単でよりDockerが使いやすい状況へと進みつつあります。周辺のエコシステムが積極的に整備されているのはDockerの利点のひとつでもあります。

docs.docker.com

また、Dockerの内部でどういうツールが動いているのかを理解し、実際にコンテナを立てたり壊したりして試行錯誤を繰り返すことで基本的な使い方も体に染み付いていきます。

ここまで来れば実際のサービスの開発環境をDockerfileとdocker-compose.ymlなどで定義し、ビルド・実行することでDockerを使った開発環境を作ることができます。
まだ途中になっている部分もありますが、これらの過程の中で得た知見などを中心に発表を行いました。

まとめ

メドレー開発本部の技術勉強会(TechLunch)で発表した内容の一部を紹介しました。

メドレーではこのような勉強会を通じてメンバーの技術の理解や底上げを促し、弊社が提供するサービスをより安全に効率良く開発・運用できるように努めています。
今回は開発環境を効率よく構築するためのツールとしてDockerを取り上げ、それを開発本部内で勉強していきました。
これによって、開発本部のメンバーが開発しやすい環境を整えることを目指しました。
今後も新しくスタンダードになりつつある技術を積極的に勉強し、サービスをより良くする上で価値あるアウトプットにしていけるよう努めて行こうと思いました。

メドレー開発本部で実施している「TechLunch」での発表内容は今後も定期的に紹介していくので、是非メドレーブログをチェックしてみてください!

参考

今回の勉強会ではこちらの本を参考にさせていただきました。

www.amazon.co.jp

何冊か手にとって読んでみましたが、こちらの本が基本的なことから網羅的に書かれており、また細か過ぎず読むのにも時間がかからないので、初心者の最初の1冊としてオススメしたいと思います。

求人

www.wantedly.com

www.medley.jp

ビジネスにも役立つ学術論文を読むメリットとは〜開発本部・TechLunch〜

※本投稿はMEDLEYオフィシャルブログから転載したものです。元記事はこちら。

info.medley.jp

こんにちは、オンライン病気事典MEDLEYの開発を担当しています徐聖博です。
メドレー開発本部では「TechLunch」という勉強会を隔週で開催しており、お互いのノウハウをシェアしています。今回私は、”学術論文を読む”ことについて発表しました。
開発者だけではなく、技術に興味がある人、更には社会では働く全ての人が知って得する内容だと思うので、是非読んでみてください。

なぜ徐が学術論文の読み方をお伝えするのか

今では、メドレーで日々エンジニアとしてWeb開発をしている私ですが、
大学院時代は東京大学大学院の本位田研究室で、一流の研究者を志し"人工知能"の研究をしていました。

研究活動のひとつに"学術論文を書く"ということがあります。
自身が良い学術論文を書くためには、その分野の先行研究の"良い学術論文"に多く触れ、そこから研究内容や論文の書き方を学ぶ必要があります。
そのため、大学院時代は日々学術論文を読む生活を送っていました。
学術論文は、一定の読み方のルールやコツがあり、そこがハードルとなり読むことを挫折する人も少なくありません。
今回は「効果的な学術論文の読み方」や「どんな論文を読めば良いのか」を改めてまとめてみました。

そもそも、学術論文とは?

スタートアップで働く人やエンジニアと呼ばれる職種の人々は日々"技術記事"と称される、技術関連のノウハウやベストプラクティスが詰まった記事を読んだりしていると思います。

// ノウハウやベストプラクティスが日々投稿されるサービス:Qiita qiita.com

// 困ったときに世界中の"わかる人"に質問をするサービス:StackOverflow stackoverflow.com

// その技術に精通している人が書くブログ:酒と泪とRubyRailsmorizyun.github.io

一方、学術論文には

  • 最先端の研究発表成果が載っている
  • 第三者による査読がなされているので品質の担保がされている
  • 関連した周辺の研究についても知識が増える

など、学術論文を読むことならではのメリットがあると考えています。

学術論文を読む意義とは

学術論文を読むのは必ずしもメリットばかりではありません。
特に、学術論文を読むのは初心者にとっては一苦労です。

学術論文を読むデメリットを挙げると、

  • いつ使えるかわからない技術が多い
  • 読むのに時間がかかる(良い論文は英語で書かれているものが多い!)
  • 高い費用がかかる

特に、筆者が学生時代は毎日1本論文を読むことを努力目標にしていましたが、「いつ使えるかわからない技術が多い」という点で論文を読むのが本当に辛く感じていたのを今でも覚えています。

しかし、そんな苦痛を乗り越えた丘の向こうにはもちろん素晴らしい世界が広がっているはずです。
例えば、

  • うまくビジネスに使いこなせたら”技術”で勝負ができる
  • ものごとを見る視点が増える
  • 純粋に知らない技術を知るのが面白い

"技術"で勝負したい、というのが技術者として働く者全てに共通する気持ちだと思っています。
技術記事を読むのに似ていますが、自分の知らない知識をインプットすることは純粋に楽しいことです。
また、学術論文では一つの物事を様々な角度からアプローチしているため物事を見る視点が増えます。
最終的に、まだビジネスに応用されていない技術を誰より先にビジネスに活かし、それで成功することは技術者にとってこれほど嬉しいことはないと信じています。

勉強会の様子

ここまでお話しした内容も含め、勉強会ではこんな内容を発表しました。

発表資料はこちら

特に、自分が卒業した本位田研究室に伝わる論文のポイントは、
新規事業を始める際にも使える重要な視点だと思っており、CTOの平山も「うんうん」と深くうなずくき共感してもらえました。

本位田研究室に伝わる論文のポイント

  • 解くべき問題は何か?
  • なぜその問題を解く必要があるのか?
  • その問題は過去に解かれていないのか?
  • なぜ解かれていないのか?
  • アイディアの着眼点は何か?
  • 具体的なアイディアは何か?
  • アイディアを具現化する際の困難さは何か?
  • 何を評価しているのか?
  • 問題・アイディア・評価はきちんと対応づいているか?
  • 何が嬉しいのか?(有用性はなにか?)
  • アイディアはどの問題のどの範囲まで有効なのか?アイディアの限界を客観的に論じているか?
  • 従来研究と公平に比較しているか?
  • 比較している従来研究に漏れはないか?

まとめ

今回は、メドレー開発本部の技術勉強会(TechLunch)で発表した内容を紹介しました。
スタートアップで働くエンジニアには普段あまり馴染みがない学術論文ですが、技術で勝負するスタートアップの技術者にこそ学術論文を読むことは必要だと思っています。
いきなり英語で読むのも辛いという方は、日本語の学術論文から読み始めるのもありだと思いますので、これまで読んだことがない方はぜひ読んでみてください。

メドレー開発本部で実施している「TechLunch」での発表内容は今後も定期的に紹介していくので、是非メドレーブログをチェックしてみてください!

メドレー公式Facebookページに「いいね!」していただけると、ブログの最新情報をフォローできます
今後とも、よろしくお願いします!