株匏䌚瀟メドレヌのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟メドレヌ

株匏䌚瀟メドレヌ の技術ブログ

å…š1414ä»¶

みなさん、こんにちは。゚ンゞニア・デザむナヌ採甚担圓の平朚です。 メドレヌでは iOS 開発コミュニティに埮力ながら還元したいず、2017 幎より iOSDC に協賛をさせおいただいおおりたすが、今幎も シルバヌスポンサヌ ずしお協賛させおいただくこずになりたした。 過去の参加レポヌト entry/2018/09/13/175702 entry/2017/09/27/120000 iOSDC 初のオンラむン開催 今幎の iOSDC は初のオンラむン開催ずいうこずで、䟋幎ずはたた違った楜しみ方ができそうです。 公匏スタッフブログに蚘茉されおいたすが、今幎はノベルティグッズが 配送 されるずのこずで、既に届いおいる方もいらっしゃるようです。匊瀟のパンフレットも同封させおいただいおたす。 今幎の タむムテヌブル も倧倉興味深い内容が倚く、今から芖聎が楜しみですが(スポンサヌチケットを頂いおはいたすが、筆者も自腹でチケット賌入しおいたす) ニコニコ生攟送での芖聎 ずいうこずで、䟋幎ずは違い、コメントなどで盛り䞊がりがあるのではないかず、倧倉期埅しおいたす。 Ask the Speaker では Discord を䜿甚するずいうこずで、察面ずはたた違ったコミュニケヌションが取れそうです。参考 URL や図などがすぐに出しおもらえたりなど、さらに孊びが深くなるのではないかず思っおいたす。 最埌に 今回は盎接䌚堎でみなさんずの亀流はできたせんが、匊瀟の゚ンゞニアも参加予定ですので、䞀緒に楜しんでいきたいず思いたす。埌日むベントレポヌトもこちらで公開したいず考えおいたす。 たた、メドレヌではこうしたむベントにも興味をお持ちの iOS ゚ンゞニアを絶賛募集䞭です。お気軜に䞋蚘よりご連絡いただければ、カゞュアルにお話をしたいです! 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
みなさん、こんにちは。゚ンゞニア・デザむナヌ採甚担圓の平朚です。 メドレヌでは iOS 開発コミュニティに埮力ながら還元したいず、2017 幎より iOSDC に協賛をさせおいただいおおりたすが、今幎も シルバヌスポンサヌ ずしお協賛させおいただくこずになりたした。 過去の参加レポヌト entry/2018/09/13/175702 entry/2017/09/27/120000 iOSDC 初のオンラむン開催 今幎の iOSDC は初のオンラむン開催ずいうこずで、䟋幎ずはたた違った楜しみ方ができそうです。 公匏スタッフブログに蚘茉されおいたすが、今幎はノベルティグッズが 配送 されるずのこずで、既に届いおいる方もいらっしゃるようです。匊瀟のパンフレットも同封させおいただいおたす。 今幎の タむムテヌブル も倧倉興味深い内容が倚く、今から芖聎が楜しみですが(スポンサヌチケットを頂いおはいたすが、筆者も自腹でチケット賌入しおいたす) ニコニコ生攟送での芖聎 ずいうこずで、䟋幎ずは違い、コメントなどで盛り䞊がりがあるのではないかず、倧倉期埅しおいたす。 Ask the Speaker では Discord を䜿甚するずいうこずで、察面ずはたた違ったコミュニケヌションが取れそうです。参考 URL や図などがすぐに出しおもらえたりなど、さらに孊びが深くなるのではないかず思っおいたす。 最埌に 今回は盎接䌚堎でみなさんずの亀流はできたせんが、匊瀟の゚ンゞニアも参加予定ですので、䞀緒に楜しんでいきたいず思いたす。埌日むベントレポヌトもこちらで公開したいず考えおいたす。 たた、メドレヌではこうしたむベントにも興味をお持ちの iOS ゚ンゞニアを絶賛募集䞭です。お気軜に䞋蚘よりご連絡いただければ、カゞュアルにお話をしたいです! 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
みなさん、こんにちは。゚ンゞニア・デザむナヌ採甚担圓の平朚です。 メドレヌでは iOS 開発コミュニティに埮力ながら還元したいず、2017 幎より iOSDC に協賛をさせおいただいおおりたすが、今幎も シルバヌスポンサヌ ずしお協賛させおいただくこずになりたした。 過去の参加レポヌト entry/2018/09/13/175702 entry/2017/09/27/120000 iOSDC 初のオンラむン開催 今幎の iOSDC は初のオンラむン開催ずいうこずで、䟋幎ずはたた違った楜しみ方ができそうです。 公匏スタッフブログに蚘茉されおいたすが、今幎はノベルティグッズが 配送 されるずのこずで、既に届いおいる方もいらっしゃるようです。匊瀟のパンフレットも同封させおいただいおたす。 今幎の タむムテヌブル も倧倉興味深い内容が倚く、今から芖聎が楜しみですが(スポンサヌチケットを頂いおはいたすが、筆者も自腹でチケット賌入しおいたす) ニコニコ生攟送での芖聎 ずいうこずで、䟋幎ずは違い、コメントなどで盛り䞊がりがあるのではないかず、倧倉期埅しおいたす。 Ask the Speaker では Discord を䜿甚するずいうこずで、察面ずはたた違ったコミュニケヌションが取れそうです。参考 URL や図などがすぐに出しおもらえたりなど、さらに孊びが深くなるのではないかず思っおいたす。 最埌に 今回は盎接䌚堎でみなさんずの亀流はできたせんが、匊瀟の゚ンゞニアも参加予定ですので、䞀緒に楜しんでいきたいず思いたす。埌日むベントレポヌトもこちらで公開したいず考えおいたす。 たた、メドレヌではこうしたむベントにも興味をお持ちの iOS ゚ンゞニアを絶賛募集䞭です。お気軜に䞋蚘よりご連絡いただければ、カゞュアルにお話をしたいです! https://www.medley.jp/jobs/
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 https://www.medley.jp/jobs/
こんにちは、むンキュベヌション本郚゚ンゞニアの加藀です。 䞻に CLINICS アプリ の開発を担圓しおいたす。 はじめに CLINICS アプリの開発では OpenAPI や gRPC を利甚しおいたす。 OpenAPI ず gRPC の間には䜕の関係もないのですが、どちらも API の仕様をスキヌマ蚀語で蚘述するずいう点では共通しおいたす。 今回はこの API スキヌマが開発にもたらすメリットに぀いお玹介しおいこうず思いたす。 API ドキュメントずしおのスキヌマ定矩 既存のコヌドに機胜を远加する際や修正を加える際に気にするこずの倚い郚分は API の仕様ではないかず思いたす。 「リク゚ストやレスポンスはどのようなデヌタなのか」「この倀は必須なのか、任意なのか」「デヌタの型は数倀なのか、文字列なのか」「フォヌマットは決たっおいるのか」など、倚くのこずを把握する必芁がありたす。 しかし、こういった API 仕様のドキュメントが敎備されおいないずいうこずも倚いのではないでしょうか。 たた、ドキュメントはあるけれどリク゚ストずレスポンスのサンプル JSON が貌っおあるだけだったり、時間が経぀うちに実装ずドキュメントが乖離しおしたいアテにならなくなっおしたっおいる堎合もありたす。 参考にできるドキュメントがない堎合は、盎接バック゚ンドの実装を芋に行くこずもあるのですが、目的のコヌドを探し出しお読み解くのは意倖ず時間がかかりたす。 特に自分以倖の゚ンゞニアが実装した機胜の堎合、API の仕様を実装から玐解くのはかなり骚が折れる䜜業です。 CLINICS アプリの開発ではこういった手間を枛らすために OpenAPI や gRPC を利甚しおいたす。 REST API のスキヌマは OpenAPI を䜿っお蚘述しおいたす。 gRPC を利甚しおいる郚分は Protocol Buffers で RPC のむンタヌフェヌスが蚘述されるため、これが API のスキヌマになっおいたす。 OpenAPI や Protocol Buffers の定矩を参照するこずで API の仕様が容易に把握できるため、非垞に䟿利です。 OpenAPI や Protocol Buffers などのスキヌマ蚀語の良い点は、宣蚀的な DSL でスキヌマを定矩できる点です。 実装蚀語に䟝存しない圢での蚘述ができ、自然蚀語のような曖昧さもないためより正確に API 仕様を蚘述するこずができたす。 ここからは OpenAPI や Protocol Buffers の実際に蚘述䟋を挙げながら、どういった圢でスキヌマを蚘述しおいくのか簡単に芋おいきたいず思いたす。 OpenAPI OpenAPI は REST API のむンタヌフェヌスを蚘述する仕様です。 ゚ンドポむントのリク゚ストパラメヌタやレスポンスの構造などを JSON や YAML で蚘述しおいくこずができたす。 か぀おは Swagger ずいう名称だったため、そちらの名前で知っおいるずいう方もいらっしゃるかもしれたせん。 実際の OpenAPI の定矩は以䞋のような圢になりたす。 openapi : 3.0.2 info : { title : OpenAPI Sample , version : 1.0.0 } paths : "/users/{user_id}" : get : parameters : - name : user_id in : path required : true schema : { type : string } responses : "200" : description : OK content : application/json : schema : type : object properties : id : { type : string } name : { type : string } age : { type : integer , nullable : true } required : [ id , name , age ] "404" : description : Not Found "500" : description : Internal Server Error 䟋ずしおナヌザヌ ID からナヌザヌのデヌタを取埗する API を蚘述しおみたした。 䞊蚘の定矩を芋るず、 GET: /users/{user_id} ずいう゚ンドポむントがある ナヌザヌの ID ( user_id ) を string でパラメヌタずしおパスの䞭に埋め蟌む レスポンスは 200, 404, 500 が返っおくる可胜性がある ずいったこずが読み取れるかず思いたす。 たた、レスポンスは以䞋のような JSON が返っおくるこずもスキヌマから読み取るこずができたす。 { "id" : "12345678-1234-1234-1234-123456789abc" , "name" : "user name" , "age" : 25 } ここでは OpenAPI の蚘述の仕方に぀いおあたり深く觊れたせんが、この他にもデヌタのフォヌマットや省略された堎合のデフォルト倀などの蚘述なども可胜です。 より詳しくは こちら を参考にしおみおください。 これらをうたく䜿うこずでより正確に API の仕様を蚘述するこずができたす。 Protocol Buffers Protocol Buffers は䞻に gRPC で甚いられるデヌタのシリアラむれヌション圢匏です。 専甚のスキヌマ蚀語を甚いおデヌタの構造や RPC のメ゜ッドの定矩を .proto ファむルに蚘述しおいきたす。 実際の .proto ファむルは以䞋のような圢になりたす。 syntax = "proto3" ; package example.protobuf ; service UserService { rpc GetUser ( GetUserRequest ) returns ( GetUserResponse ); } message GetUserRequest { string id = 1 ; } message GetUserResponse { User user = 1 ; } message User { string id = 1 ; string name = 2 ; int32 age = 3 ; } 少し独特な芋た目をしおいたすが、 message ずしお構造䜓のようなデヌタ構造が定矩されおいるこずが芋お取れるず思いたす。 各メッセヌゞにはフィヌルドが定矩されおおり、型ずフィヌルド名が宣蚀されおいたす。 スキヌマ蚀語を䜿うメリット スキヌマはドキュメントの代わりずしお䜿えるだけでなく、他にもいく぀か䜿い道があるので玹介しおいこうず思いたす。 スキヌマから゜ヌスコヌドを自動生成できる スキヌマ蚀語による蚘述は人間にずっお読みやすいだけでなく機械的に凊理できる圢匏でもあるので、スキヌマから゜ヌスコヌドを自動生成するこずも可胜です。 プログラミング蚀語や䜿っおいるフレヌムワヌクによらず、サヌバヌ偎ではリク゚ストのバリデヌションを、たたクラむアント偎ではレスポンスの JSON をクラスや構造䜓に詰めるような凊理を曞くこずが倚いのではないでしょうか。 事前にスキヌマ定矩を曞いおいる堎合はスキヌマを芋ながらこういったコヌドを曞き起こしおいくこずになるのですが、せっかく machine-readable な圢のスキヌマがあるのだから自動でコヌドを生成したくなるのが自然な考えでしょう。 自動で生成しおしたえば定型のコヌドを曞く手間を枛らせるだけでなく、手曞きするずどうしおも起こしがちな JSON のキヌ名を間違えるずいったミスを防ぐこずもできたす。 たた、Web, iOS, Android などの耇数プラットフォヌムでサヌビスを展開しおいる堎合でも、それぞれの実装が乖離しないように管理しおいくこずも容易です。 gRPC の堎合は Protocol Buffers から゜ヌスコヌドを生成するのがほが前提ずなっおいたす。 protoc コマンドを利甚するず .proto ファむルから各蚀語のサヌバヌ・クラむアントコヌドを生成するこずができたす。 OpenAPI の堎合、 openapi-generator や swagger-codegen などのツヌルを利甚するこずで各皮蚀語のコヌドを自動生成が可胜です。 openapi-generator や swagger-codegen には倚くの蚀語ずフレヌムワヌクのサヌバヌスタブず API クラむアントのゞェネレヌタが甚意されおいたす。 既存のゞェネレヌタを䜿うだけでも十分に匷力なのですが、さらに自前でコヌドゞェネレヌタを曞けばプロゞェクト固有のルヌルでコヌドを生成するずいったこずも可胜です。 OpenAPI のドキュメント自䜓はただの YAML/JSON なので、パヌスしおスキヌマ定矩を再垰的に読んでいけばコヌド生成に必芁な情報を集めるこずができたす。 Protocol Buffers からコヌドを生成する堎合は protoc のプラグむンを曞く のが簡単でオススメです。 モックサヌバヌを䜿っおクラむアント開発を進められる コヌドの自動生成の他にもスキヌマからモックサヌバを立ち䞊げるずいった掻甚方法もありたす。 Prism のようなスキヌマ定矩から固定のデヌタを返すモックサヌバを立ち䞊げるツヌルを利甚すれば、クラむアント偎の開発もしやすくなりたす。 特にフロント゚ンドずバック゚ンドで担圓が分かれおいるような堎合は、開発初期はモックサヌバヌを䜿っお開発を始め、バック゚ンドの実装ができおきた頃に結合するずいう流れを螏むこずで、フロント゚ンドもより早いタむミングから開発に着手するこずができるようになりたす。 実際に Prism を䜿っおモックサヌバヌを立ち䞊げるずこんな感じになりたす。 スキヌマファヌスト開発 このような開発スタむルはスキヌマファヌスト開発・スキヌマ駆動開発などず呌ばれおいたす。 明確な定矩や出兞があるわけではないのですが、スキヌマファヌストな開発は以䞋のような開発スタむル党般を指しおいたす。 スキヌマは実装蚀語によらない machine-readable な圢で蚘述する ドキュメントをスキヌマから自動生成する クラむアント/サヌバヌのコヌドをスキヌマから自動生成する 実際にスキヌマファヌストな開発を実践するためにはスキヌマをメンテナンスするモチベヌションを高く保぀必芁がありたす。 コヌドも曞いた䞊でスキヌマも曞かないいけないずなるずおそらくスキヌマが曎新されなくなっおいくので、可胜な限りスキヌマからコヌドを生成する努力が必芁になりたす。 䞀方、うたく実践すればスキヌマずいう圢で 100% 信頌できる API ドキュメントが手に入り、クラむアント/サヌバヌ間での霟霬も枛らせるので、実践しおみる䟡倀はあるのではないかず思いたす。 たずめ 今回は CLINICS アプリの開発でのスキヌマ蚀語の掻甚䟋に぀いお玹介したした。 実際に開発の䞭でスキヌマ蚀語を䜿うこずで API 仕様に぀いお把握する劎力が枛り、゚ンゞニア間のコミュニケヌションも取りやすくなったず感じおいたす。 たた、䞀郚のクラむアントコヌドは OpenAPI や Protocol Buffers から自動生成しおいるのですが、かなり手間が省けるず同時に人間の手で曞くず起こりがちなミスも防ぐこずができおいたす。 OpenAPI であれば既存の REST API の仕様を曞き起こすずころから䜿い始められるので、興味のある方はぜひ䞀床䜿っおみおはいかがでしょうか。 最埌に むンキュベヌション本郚 では「医療ヘルスケアの未来」を぀くる新芏事業の立ち䞊げに挑戊しおいたす。そんな私たちず䞀緒に働いおみたいず思った方は、ぜひ以䞋の採甚情報もチェックしおみおください。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 https://www.medley.jp/jobs/
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは、19 新卒の桶谷です。珟圚は CLINICS で怜査呚りの開発を担圓しおいたす。 最近は、私自身が基瀎疟患持ちずいうこずもあり、瀟䌚情勢を考慮しおフルリモヌトで業務に勀しんでいたす。オンラむンコミュニケヌションは察面ず比べ、意識しなければならない点が倚く、慣れが必芁であるず日々感じおいたす。少しでも察面に近い環境を実珟するために、䞀県レフカメラを Web カメラずしお代甚したり、ダむナミックマむクを䜿甚しおクリアな音声を届けられるように䜜業環境の改善に取り組んでいたす。 今回は CLINICS 開発チヌムで課題ずなっおいた「オンボヌディングやキャッチアップに時間がかかる問題」を解決するために行った、暪軞の取り組みに぀いお玹介したす。 はじめに CLINICS 開発チヌムではクラりド蚺療支揎システム「 CLINICS 」の機胜ずしお䞻に電子カルテ、オンラむン蚺療、予玄システムなどの機胜の開発を行っおいたす。医療システムの開発においお医療業務知識は必芁䞍可欠であり、䟋えば「䌚蚈」や「怜査」ずいった医療機関で行われる業務に関する理解が芁求されたす。そのため、各々が日々キャッチアップに勀しんでいる䞀方、ひず぀ひず぀の業務が耇雑であるために、耇数の機胜を暪断したプロダクト理解、党䜓把握が難しい課題がありたした。そこで、この問題を解決するべく「暪軞勉匷䌚」ず題しお、CLINICS のドメむン知識共有䌚を行うこずにしたした。 ドメむン知識共有䌚の抂芁 ドメむン知識共有䌚は各々が携わった䞭で蓄積しおきた業務知識や開発の背景を共有する䌚です。本䌚は毎週 1 時間トピックに沿っおオンラむン(Google Meet)で実斜したす。あらかじめトピック、発衚者、ファシリテヌタヌを指定し、発衚者には簡単な資料を甚意しおもらいたす。加えお参加者には以䞋のこずを意識しおもらいたした。 発衚者は察話型の発衚を意識しフラットな雰囲気を぀くる 参加者はチャットを甚いお思ったこずを぀ぶやく 各トピックは医療システムを開発する䞊で必芁なドメむン知識を切り口ずしお、技術寄りの内容ずなっおいたす。発衚者によっおは勉匷䌚埌の宿題が甚意されたり、おすすめの本玹介があったりず倚皮倚様です。発衚圢匏をあえお定めないこずで、各回ごずに発衚者の個性が出るずいうのも面癜みの䞀぀だず思いたす。特に宿題があった回では、埌日にフィヌドバック䌚が蚭けられ知識の定着に繋がりたした。 実際に行ったトピック 実際の様子 ドメむン知識共有䌚を終えお 今回ドメむン知識共有䌚を通しお、機胜の実装背景や抂芁を幅広く知るこずができたした。「䌚蚈業務の耇雑さ」や「受付から蚺察たでの動線蚭蚈」などのこれたでは共有する機䌚がなかった個々が持っおいる知識・知芋を孊ぶこずができ、チヌム党䜓でドメむン知識に関する認識合わせをする良い機䌚ずなりたした。 最埌に勉匷䌚の振り返りを行ったずころ、以䞋のような意芋がありたした。 ドメむン知識共有䌚を通しおチヌム力が䞊がっおきおいる 勘違いしおいた知識を蚂正できた 盞互理解が深たりチヌム党䜓ずしおコミュニケヌションのハヌドルを䞋げるこずができた 各専門領域に関するドキュメントを䞀箇所にたずめるこずができた ポゞティブな意芋が倚く、取り組みの結果ずしおチヌムの基瀎力向䞊にも繋がったず感じおいたす。加えお、ドメむン知識共有䌚甚に䜜成した資料はドキュメントずしお残るため、オンボヌディング資料などに掻甚ができそうです。しかしながら、以䞋のような問題もありたす。 発衚者の準備コストが高い 抂芁説明で終わっおしたい即日業務で䜿甚できる内容ではない 孊んだこずを深堀りできおいないため知識の定着に繋がらない 䞊蚘に぀いおは、䟋えば発衚者を 2 人ペアにしお準備コストを分散させたり、宿題を出しお次回にフィヌドバックする、開発チヌム以倖も気軜に参加ができるようにラむトなトピックを远加するなど、今埌のドメむン知識共有䌚のなかで改善しおいきたいず思いたす。 さいごに 今回は CLINICS 開発チヌムで行った暪軞の取り組みに぀いお玹介させおいただきたした。 暪軞でお互いをフォロヌしあうような「情報共有の堎」を䜜るこずで、より良い組織になっおいくず感じおいたす。今埌、さらにプロダクトの機胜が増えるずずもに事業郚党䜓ずしお、関わるメンバヌが増えるため、暪軞での知識共有の仕組みは事業郚を含めお必芁であるず考えおいたす。開発チヌムに限らずに、プロダクトに関わるメンバヌを巻き蟌み、組織コミュニケヌションの改善を続けおいきたいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
株匏䌚瀟メドレヌの゚ンゞニアの笹塚です。 䞻にゞョブメドレヌのむンフラを担圓しおいたす。 盎近では、コンテナ化されおいなかった環境の移行などをしおいたした。 䌑日は䞻にゲヌムをやっおいたす。今は、日本語版がリリヌスされたばかりの「レムナントフロム・ゞ・アッシュ」に倢䞭です。 今回は Terraform のテスト環境を、 Terraform Workspaces を䜿甚しお構築した事䟋を玹介したす。 背景 ゞョブメドレヌにはいく぀かのサヌビスがあり、Terraform によるコヌド化が進んでいるサヌビスず、Ansible、 itamae などで郚分的にコヌド化はされおいるものの、Terraform の䜿甚が遅れおいるサヌビスが混圚しおおり、これらのサヌビスに぀いおも Terraform ぞの移行を進めおいたす。 Terraform ぞの移行ずあわせお、メンテナンスを担圓するメンバヌを増やす必芁があるのですが 【䜜業担圓】 Terraform のコヌドから、実際に皌働させる環境を䜜るのは慣れおいおも難しい。 【レビュワヌ】 Terraform のコヌドの差分だけで、内容をすぐに把握するのは難しい。 などの理由から、䜜業担圓、レビュワヌずもにハヌドルが䜎いずは蚀えず、Terraform によるむンフラの倉曎内容を事前に確認できる環境構築が必芁だず感じるようになりたした。 怜蚎内容 事前に確認できる環境を䜜るにあたり、たず最初に怜蚎したのは、各ステヌゞのコヌドを共通化するこずでした。 ゞョブメドレヌの関連サヌビスでは、倧きくわけお 3 ぀のステヌゞで構成しおいたす。 Sandbox(個人の怜蚌甚) → QA(リリヌス前の怜蚌甚) → Production この各ステヌゞのコヌドを共通化できれば、Production には QA 環境たでで確認枈みのコヌドを apply するこずができたす。 ですが、Sandbox 環境、QA 環境、Production 環境はそれぞれ䌌おはいるものの、党おが同じ構成ではありたせん。 Terraform の HCL では if 構文がない( resource の䜜成を count で制埡するこずはできる) module 単䜍でのリ゜ヌス䜜成の制埡ができない(Terraform 0.13 から module でも count や for_each が可胜になる ようです) などの制限があり、構造の差分をコヌドで吞収しにくく、共通化できたずしおもメンテナンス性を䞋げる可胜性が高いです。 たた、すでに Terraform でコヌド化されおいる状態からの移行䜜業も楜ではないでしょう。 そこで、ステヌゞごずのコヌドを共通化するのではなく、 AWS Organizations で別アカりントを䜜り、各ステヌゞのコヌドを詊せる環境を䜜るこずにしたした。 <目暙ずする> Terraform のコヌドをプロダクションアカりントで実行する前に、テストアカりントで実行し、蚭定した内容を AWS マネゞメントコン゜ヌル や AWS CLI で確認するこずできる。 テストアカりント䞊で蚭定を確認した埌、プロダクションアカりントに同じコヌドを apply するこずができる。 コストを抑えるため、テストアカりント䞊のリ゜ヌスは、確認が終了したら destory するこずができる。 <目暙ずしない> テストアカりント䞊でサヌビスが皌働するこずは目暙ずしない。 必芁なデヌタセットの䜜成など甚意するものが増えるので、目暙には含めたせんでした。 蚭定䜜業 必芁な䜜業は倧きくわけお 2 ぀です。 Terraform Workspaces の蚭定 アカりントごずに必芁なコヌドの远加、修正 Terraform Workspaces の蚭定 Terraform ず AWS provider の蚭定を倉曎するこずで、workspace を切り替えるこずができたす。 以䞋が䜜業むメヌゞです。 workspace の远加 $ terraform workspace new production $ terraform workspace list default * production Terraform の環境倉曎 terraform { required_version = "= 0.12.28" backend "s3" { bucket = "example-state" workspace_key_prefix = "workspace" dynamodb_table = "terraform-state-lock" key = "example.tfstate" region = "ap-northeast-1" profile = "production" } } provider "aws" { region = "ap-northeast-1" version = "= 2.70.0" profile = var. workspace_profile [ terraform . workspace ] } variable "workspace_profile" { type = map ( string ) default = { default = "test" production = "production" } } この䟋では、default workspace はテスト環境、Production を実際にサヌビスが皌働する環境のアカりントになるように蚭定しおいたす。 それぞれ default は、aws config の test profile、Production は production profile を参照しおいたす。 s3://example-state/example.tfstate がテスト環境、 s3://example-state/workspace/production/example.tfstate が、プロダクション環境の state ファむルになりたす。 Terraform のコヌド内からは、珟圚の workspace 名を terraform.workspace で参照するこずができたす。 ここたでの蚭定で $ terraform workspace select [workspace 名] で workspace を切り替えるこずができるようになりたした。 あずは、アカりントごずに必芁な倉曎をしおいきたす。 アカりントをたたいだ共通のリ゜ヌスの定矩 党アカりントでナニヌクにする必芁があるリ゜ヌス(S3 bucket、DNS など)の堎合は、名称の分岐凊理が必芁です。 テストアカりントでは、リ゜ヌス名に prefix を぀けお䜜成するようにしたした。 # 定矩 variable "example_bucket_name" { type = map ( string ) default = { default = "test-example-bucket" production = "example-bucket" } } # リ゜ヌスでの参照時 resource "aws_s3_bucket" "example" { bucket = var. example_bucket_name [ terraform . workspace ] .. } テストアカりントで起動するむンスタンスタむプや台数の倉曎 テストアカりントでは EC2 のむンスタンスを起動させなくおも良い堎合には、台数を倉曎するようにしたした。 resource "aws_autoscaling_group" "example_web" { name = "example-web" max_size = 12 min_size = 6 desired_capacity = terraform. workspace == "production" ? 6 : 0 
 } むンスタンスの起動が必芁な堎合も、同様の分岐でむンスタンスタむプの倉曎を行っおいたす。 コヌド化をしないリ゜ヌスの扱い プロダクションアカりントで䞀旊コヌド化を保留したリ゜ヌスに぀いおは data source で参照したすが、テストアカりントにはリ゜ヌスが存圚しないため䜜成しなければいけたせん。 テストアカりントのリ゜ヌスは確認が終了した段階で destroy したいので ステヌゞ甚の Terraform コヌドずは別に、必芁なリ゜ヌスを䜜成するコヌドを甚意する 必芁なリ゜ヌス甚のコヌド → ステヌゞ甚のコヌドの順に apply する ようにしたした。 data source で参照できれば良い範囲でのコヌド化なので、この远加のリ゜ヌスも最小限のコストになるようにしおいたす。 以䞊の蚭定で、同じ Terraform のコヌドを workspace を切り替えお plan、apply ができるようになりたした。 運甚しおみお プロダクションアカりントに apply する前に、テストアカりントで事前に apply するこずができるようになったので、䜜業䞭の詊行錯誀もしやすくなりたした。 レビュワヌも、テストアカりント䞊で実際に apply された結果を確認するこずができるようになり、apply の差分だけではわかりにくかった倉曎内容を確認できるようになりたした。 これなら新しく担圓するメンバヌの䞍安を、少しかもしれたせんが解消できそうです。 たずめ 今回は Terraform のテスト環境を、Terraform Workspaces を䜿甚しお構築した事䟋を玹介させおいただきたした。 テストアカりント䞊のリ゜ヌスの自動 destroy や、 plan、apply の自動化に぀いおは觊れられおいたせんが、たた別の機䌚に玹介できればず思いたす。 長らく運甚しおいるサヌビスでは、サヌビスを皌働させたたた解決しなければいけない課題が数倚くありたす。 それらの課題を、䞀぀ず぀着実に解決しおいくこずに楜しさを芋いだせる方、ぜひメドレヌで䞀緒に働きたしょう 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp