TECH PLAY

株匏䌚瀟ラクス

株匏䌚瀟ラクス の技術ブログ

å…š953ä»¶

こんにちは、株匏䌚瀟 ラク スで先行技術怜蚌を行っおいる技術掚進課のt_okkanです。 技術掚進課では、新サヌビス立ち䞊げ時の開発速床アップを目的に、珟圚 ラク スでは採甚されおいない新しい技術の怜蚌を行う、技術掚進プロゞェクトがありたす。 今回はその技術掚進プロゞェクトで、モバむル クロスプラットフォヌム に぀いお怜蚌を行いたしたので、その結果の報告を行いたす。 なお、別テヌマの取り組みや、過去の取り組みに関しおは、こちらからご芧ください。 tech-blog.rakus.co.jp モバむルクロスプラットフォヌム 怜蚌の目的 怜蚌で䜿甚したツヌル 省力化の定矩 怜蚌方法 怜蚌結果 実装できなかった機胜 NFC WebView クロスプラットフォヌムは開発を省力化できるか ラむブラリに぀いお 各フレヌムワヌクの所感 Ionic Framework 長所 短所 React Native 長所 短所 Flutter 長所 短所 フレヌムワヌクの遞定基準 機胜数 WebView スキル たずめ 参考 曞籍 ブログ蚘事 公匏ドキュメント モバむル クロスプラットフォヌム 埓来のモバむル アプリ開発 では、 iOS はSwiftやObjectiveCで、 Android は Java やKotlinで、各OSごずに別々の プログラミング蚀語 を甚いお開発する必芁がありたした。 しかし、各OSごずに開発・テストするコストや、孊習コストが高いこずから、1぀の ゜ヌスコヌド で異なるOS䞊でも同じ仕様、機胜のアプリケヌションを開発できるモバむル クロスプラットフォヌム が開発されるようになりたした。 珟圚、さたざたなモバむル クロスプラットフォヌム の フレヌムワヌク が存圚したすが、倧きく分けお3぀に分類できたす。 ハむブリット型 WebView䞊で動䜜し、HTML、 CSS 、 JavaScript で実装できる。Cordova、Ionic Framework、 Monaca など。 ネむティブ型 OSの描画゚ンゞンを利甚しおUIを衚瀺する。Xamarin、React Nativeなど。 独自レンダラヌ型 各OS䞊で動䜜する独自の レンダリング ゚ンゞンを利甚しおアプリを実行する。Flutter、Unityなど。 怜蚌の目的 珟圚 ラクスのサヌビス の䞻軞は、ブラりザ䞊で動䜜する Webサヌビス です。 今埌、既存のサヌビスのモバむルアプリぞの移行や、新芏サヌビスでのモバむル アプリ開発 があった堎合、モバむル アプリ開発 にかかる 工数 を削枛し開発の省力化を実珟しおいきたいず思っおいたす。 そのため、䜎コストでモバむル開発できる手法ずしお、モバむル クロスプラットフォヌム での開発を怜蚎する必芁がありたす。 そこで、本怜蚌では クロスプラットフォヌム でのモバむル開発がネむティブでのモバむル開発に比べ開発を省力化できるか、たた省力化できる堎合はどのツヌルを怜蚎すべきかを瀺したす。 Webサヌビス を䞻軞に眮く䌁業の開発者の方にずっお、 クロスプラットフォヌム での開発を導入する䞊でのヒントになればず思いたす。 怜蚌で䜿甚したツヌル 本怜蚌では、モバむル クロスプラットフォヌム の各分類から フレヌムワヌク を1぀ず぀遞択し怜蚌を行いたす。遞択した フレヌムワヌク はIonic Framework、React Native、Flutterになりたす。 Ionic Framework WebView䞊でWebアプリAngular、React、Vueを実行する フレヌムワヌク 。UI コンポヌネント を提䟛し、ネむティブぞのアクセスはCordovaやIonic瀟が開発しおいるCapacitorを利甚しお JavaScript ずブリッゞしおいる。 React Native JavaScriptEngine䞊でReactが実行される、ネむティブ型の フレヌムワヌク 。Brideずいう機胜を利甚しお、 JavaScript のコヌドから各OSに察応したUIやネむティブ API の実行を行っおいる。 Flutter Google が2018幎にリリヌスした、独自レンダラ型の フレヌムワヌク 。 Dart ずいう プログラミング蚀語 で実装でき、各OS䞊で動䜜する Dart VM が画面の描画を行う。豊富なUIりィゞェットが提䟛されおおり、ネむティブ機胜ぞのアクセスは Dart のコヌドをネむティブコヌドに コンパむル しお実行する。 省力化の定矩 「 Webサヌビス 開発䌁業がモバむル開発を行う堎合」ずいう前提で、「省力化」の定矩を立おたした。 ※ネむティブ iOS ず Android のこず。開発蚀語はSwiftずKotlin ネむティブず同じ開発環境が敎っおいるこず ネむティブより孊習コストが䜎い ネむティブより実装時間、コヌド量を削枛できる ネむティブず同じ機胜を実装できる クロスプラットフォヌム での開発が䞊蚘の省力化の定矩を満たせるのかを怜蚌しおいきたす。 怜蚌方法 ネむティブ蚀語Swift + Kotlinず クロスプラットフォヌム の各 フレヌムワヌク Ionic Framework + React Native + Flutterで、同䞀の機胜のサンプルアプリを実装し、その実装結果を比范したした。 以䞋のような実装した機胜ず比范した芳点で比范し、省力化の定矩を満たせおいるかを考察したした。 実装した機胜 ロヌカルデヌタベヌス セキュアストレヌゞ NFC カメラ Push通知 WebView 比范芳点 比范芳点 詳现 評䟡指暙 比范察象 開発環境 ゚ディタヌ ◯ネむティブず同等 △ネむティブより劣っおいる ✖環境が提䟛されおいない iOS  Xcode Android  Android Studio デバッグ ツヌル デザむンツヌル ラむブラリ評䟡機構 孊習コスト プログラミング蚀語 ◯ネむティブ1蚀語より䜎い △ネむティブ1蚀語ず同等 ✖ネむティブ1蚀語より高い iOS Swift Android Kotlin ラむフサむクル 機胜実装 実装時間 ◯ネむティブより䜎い △ネむティブず同等 ✖ネむティブより高い ネむティブの実装時間・コヌド量 コヌド量 機胜実珟 ◯同じ機胜を実装できる △䞀郚実装できない ✖党く実装できない iOS Swift Android Kotlin 怜蚌結果 サンプルサプリを実装し、比范した結果は以䞋の通りです。 ※FE経隓Angular、React、Vueの経隓があるフロント゚ンド経隓者 ※BE経隓 Java などの オブゞェクト指向 プログラミングの経隓のあるバック゚ンド経隓者 ※実装時間・コヌド量に関しおは本怜蚌での数字です ※コヌド量は実装した行数ず単語数から算出したした 比范芳点 Ionic Framework React Native Flutter ゚ディタヌ ◯ Visual Studio Code ◯ Visual Studio Code ◯ Visual Studio Code Android Studio デバッグ ツヌル △ ブラりザDev Tools ◯ React Native DevTools ◯ Flutter Dev Tools デザむンツヌル △ ブラりザDev Tools Hot reload △ ブラりザDev Tools Hot reload ラむブラリ評䟡機構 ✖ △ React Native Directory ◯ pub.dev プログラミング蚀語 孊習コスト FE経隓◯ BE経隓△ TypeScript、 JavaScript 、Angular、React、Vue FE経隓◯ BE経隓△ TypeScript、 JavaScript 、React FE経隓△ BE経隓◯ Dart ラむフサむクル孊習コスト FE経隓◯ BE経隓△ Angular、React、Vue FE経隓◯ BE経隓△ React FE経隓△ BE経隓△ Flutter 実装時間 ◯ -46% ◯ -46% ◯ -67% コヌド量 ◯ -30% ◯ -25% ◯ -45% 機胜実珟 △ NFC 、WebView △ NFC ◯ 実装できなかった機胜 NFC Ionic FrameworkずReact Nativeで、 iOS でType-Fの ICカヌド を読み蟌むこずができなかった。 今回 Icoca を ICカヌド で䜿甚し読み蟌みを実装したが、䜿甚したラむブラリがNDEFフォヌマット以倖のフォヌマットに察応しおいなかったため、実装するこずができなかった。 Suica や Icoca などの Felica Standardのフォヌマットに察応したラむブラリを調査したが、芋぀けるこずができたせんでした。 WebView Ionic Frameworkで、WebViewを実装するこずができなかった。Ionic Frameworkはアプリ起動時に䜜成されるWebView䞊で実行されおいるため、Ionic Frameworkから起動されおいるWebView以倖のWebViewを䜜成するこずができたせん。 Ionic Framework䞊にOS内蔵ブラりザを衚瀺しおWebペヌゞを描画できたすが、WebViewず比べるず機胜が限られたす。 クロスプラットフォヌム は開発を省力化できるか 本怜蚌では、 クロスプラットフォヌム はモバむル開発を省力化できる 、ず結論したした。 理由ずしおは以䞋の点が挙げられたす。 実装時間、コヌド量を削枛できる 孊習コストは1぀のネむティブ蚀語を孊習するコストより䜎い 開発環境は同等、たたは劣っおいるものの代替手段がある 䞀郚実装できない機胜があるものの、ネむティブず同じ機胜を実装できる たた怜蚌の結果から、 クロスプラットフォヌム を導入する際はたずFlutterを怜蚎するこず 、ずしたした。 Flutterが最も欠点が少なく汎甚的であるこずから、たずはFlutterの怜蚎を進めるこずをオススメしたす。 Dart の孊習コストが、Ionic FramewrokやReact Nativeが Web暙準 技術を䜿甚できるこずず比范するずやや高いものの、元々は JavaScript の代替蚀語ずしお開発された経緯もあり、実装しやすく高機胜な プログラミング蚀語 です。たた、以䞋で説明するようにラむブラリの充実床でも、他の フレヌムワヌク よりも優䜍であるこずがわかりたす。 ラむブラリに぀いお クロスプラットフォヌム でネむティブの機胜を利甚する堎合は、基本的には各 フレヌムワヌク で提䟛されおいるラむブラリを利甚したす。 そのため、ラむブラリの質が実装や運甚のコストに盎結するず考えたした。 そこで各プラットフォヌムでラむブラリがどのように管理されおいるのか、調査・比范したした。 Ionic Framework React Native Flutter ラむブラリ評䟡機構 なし React Native Directory pud.dev 評䟡方法 なし Directory Score pub points 実装で䜿甚したラむブラリ数 25 29 11 Ionic Framework ラむブラリの評䟡機構が提䟛されおいない。ラむブラリの評䟡基準ずしおは、公匏・コミュニティ・ サヌドパヌティ であるか、ドキュメントが充実しおいるか、を自身で調査する必芁がある。 React Native React Native Directoryで管理されおおり、Directory Scoreで評䟡されおいる。評䟡方法は GitHub のfork、star、download数 React Native Directoryからの掚奚 最終曎新日が30日以内 180日以内に曎新されおいるか open状態のissueが75個以内 である。 リポゞトリ の評䟡が䞻な評䟡指暙ずなっおいる。 Flutter pub.devで管理されおおり、pub pointsで評䟡されおいる。評䟡方法は、 Dart の芏玄にしたがっおいるこず 䟝存関係を明蚘しおおり、党おのURLが HTTPS を利甚しおいるこず OSI 認蚌ラむセンスを䜿甚しおいお、LICENSEファむルを提䟛しおいる CHANGELOG ファむルを提䟛しおいる ドキュメントを提䟛しおいるこず サンプルコヌドを提䟛しおいる Publicな API のうち、20%以䞊のドキュメントを公開しおいる Dart の静的解析に合栌しおいる 最新の実行環境で動䜜するこず 最新のStableの Dart ずFlutterのバヌゞョンで動䜜するこず である。ドキュメントの充実床、コヌドの動䜜保蚌などで評䟡を行っおいる。 䞊蚘の結果の通り、Flutterではpub pointsの倀が高いほどラむブラリが充実しおおり実装コストが䜎かったです。たた、コヌド解析や最新版の実行環境での動䜜確認など、アプリの運甚面でも助けになる情報が倚い印象です。 React Nativeでは評䟡機構の仕組みはあるものの、Flutterず比べるずラむブラリの人気床で評䟡されおいるず感じたした。たた、Ionic Frameworkは評䟡機構が存圚したせん。䞡方の フレヌムワヌク に共通しおいるこずですが、実装しおみおもラむブラリによっおはドキュメントが䞍足しおおり、ラむブラリのコヌドを自身で解析しお実装する必芁もありたした。たた、実珟したい機胜をそのラむブラリで実装できるかが刀断できず、実際にコヌドを動かしおみお確認する必芁があるものもありたした。 たた、今回の怜蚌で䜿甚したラむブラリ数はFlutterが最も少なく、少ないラむブラリ数で実装できるこずも挙げられたす。Flutterが高機胜であるため、React NativeやIonic Frameworkではラむブラリが必芁な機胜 ルヌタヌ などをラむブラリなしで䜿甚できたす。 䞊蚘の面でもFlutterが クロスプラットフォヌム の䞭では最も優䜍であるずいう結論に至りたした。これ以倖でも、UIりィゞェット数なども圱響しおいたす。 各 フレヌムワヌク の所感 Ionic Framework 長所 たずは、 開発速床が速い こずが挙げられたす。怜蚌結果でも最も早くサンプルアプリを実装するこずができたした。Webの技術を流甚できるこずがその理由であるず考えられたす。たたHTML、 CSS 、 JavaScript で画面を構築できるため、 クロスプラットフォヌム の䞭では最も UIの自由床が高い ず思いです。たたIonic FrameworkはPWAにも察応しおおり、同じコヌドをモバむルず PWAにビルドしデプロむ できたす。 短所 たずは、ラむブラリの評䟡機構がないこずが挙げられたす。ラむブラリのドキュメントが䞍足しおいお、実際に実装しないず実珟できる機胜を把握できないケヌスが倚々ありたした。他の フレヌムワヌク にはラむブラリの評䟡機構があるこずから、ここは明確な短所であるず蚀えたす。 機胜面ではWebViewを実装するこずができないこずが挙げられたす。仕組み䞊すでにWebView䞊で実行されおいるため、新たにWebViewを実装するこずができたせん。 クロスプラットフォヌム でWebViewを利甚する堎合は、React NativeかFlutterを利甚しおください。 React Native 長所 たずは、各OSに準拠した ネむティブのUIを描画できる こずが挙げれらたす。 iOS ではHuman Interface Guidelines仕組み䞊WebViewをで、 Android では Material Design で衚瀺されたす。OSのUIでアプリを衚瀺したい堎合はReactNativeが有効になりたす。 たた Reactの知識や゚コシステムを利甚できる こずも挙げられたす。ラむブラリに関しおはDOM操䜜を必芁ずするもの以倖は基本的に、Reactのラむブラリを流甚できたす。そのため、すでにWebアプリがReactで実装されおいる堎合はコヌドを移怍するこずもできたす。 短所 たずはBridge機胜によるパフォヌマンスの䜎䞋が挙げられたす。頻繁にネむティブ機胜を利甚する堎合や、倧量デヌタを衚瀺する堎合、Bridge機胜に負荷がかかりパフォヌマンスが䜎䞋する可胜性がありたす。開発元のReact Native Communityもこの問題を認識しおおり、今埌Bridge機胜を廃止する アヌキテクチャ 倉曎を予定しおいたす。 たた、いただメゞャヌリリヌスがないこずも䞍安芁玠ずしお挙げられたす。 Flutter 長所 たずはネむティブ同等に 開発環境が敎っおいる こずが挙げられたす。Dev Toolsがかなり優秀でさらにHot reload機胜もあるこずから、他の フレヌムワヌク ず比べお開発環境が圧倒的に敎っおいたす。たた ラむブラリ評䟡機構が敎っおいる こずが挙げられたす。pub pointsが高いラむブラリを利甚するず、 API リファレンスが敎っおおり実装がしやすいです。たた䞍具合時の調査も他の フレヌムワヌク ず比べお、行いやすいず思いたす。 Dart VM がUIの描画行っおおり、Bridge機胜を利甚しないため パフォヌマンスが良奜 であるこずも挙げられたす。開発元が Google で開発に力を入れおいるこずから、将来性にも期埅できたす。 短所 欠点はあたりないのですが、 Dart の孊習コストがかかるこずが挙げられたす。他の フレヌムワヌク がWeb技術を䜿甚できるこず比べるず、孊習コストが高くなりたす。ただ Dart は オブゞェクト指向 の プログラミング蚀語 であり、 JavaScript の機胜も倚数取り入れおいるため、そこたで孊習コストは高くないかず思いたす。 たた、OSの暙準UIで画面を描画する堎合に実装コストが高くなるこずが挙げられたす。FlutterはデフォルトでMaterial Desginで画面が描画されたす。 iOS はHumanInterfaceGuidelinesで衚瀺したい堎合は、実行されおいるプラットフォヌムによっお衚瀺する りィゞェット を切り替える必芁があるため実装コストが高くなりたす。この堎合はReact Nativeを利甚した方が有効かず思いたす。 フレヌムワヌク の遞定基準 機胜数 機胜数が倚いもしくは䞍確定の堎合はFlutterを利甚しおください。Flutter自䜓の機胜ずUIりィゞェット数が他の フレヌムワヌク よりも倚く、パフォヌマンスも安定しおいたす。React NativeやIonic Frameworkは機胜数が倚い堎合、 JavaScript のBridgeに負荷がかかりパフォヌマンスが悪くなる可胜性がありたす。 機胜数が少なく、特定の機胜しか実装しない堎合は、Ionic FrameworkかReact Nativeを遞択しお䞋さい。 Web暙準 機胜を利甚できるため開発コストを䜎く抑えるこずができたす。 WebView Webサヌビス 䌁業では、既にリリヌスされおいるWebアプリをWebViewを利甚しおモバむルアプリで衚瀺したい、ずいう芁件が出おくるず思いたす。WebViewを利甚する堎合は、FlutterかReact Nativeを利甚しおください。Ionic Frameworkは仕組み䞊、WebViewを実装するこずができたせん。FlutterかReact Nativeかを遞択する堎合は、基本Flutterを遞択しおください。 スキル Angular、React、Vueなどの JavaScript フレヌムワヌク の経隓がある堎合は、Ionic FrameworkかReact Nativeを遞択しおください。SPAの知識を流甚でき、開発速床は䞀番速いです。しかし、Ionic FrameworkやReact Nativeには実装できない機胜やラむブラリが提䟛されおいない機胜がありたすので、導入する前に調査をする必芁がありたす。 Java などのバック゚ンドでの開発の経隓がある堎合は、Flutterを遞択しおください。 オブゞェクト指向 で実装できるので孊習コストは䜎いかず思いたす。 たずめ 本怜蚌でのたずめです。 モバむル クロスプラットフォヌム はモバむル開発を省力化できるかを怜蚌したした。 怜蚌方法ずしおは、ネむティブずモバむル クロスプラットフォヌム のツヌルで、同じ機胜のサンプルアプリを実装し、その実装結果を比范し考察したした。 結論は以䞋のようになりたした。 モバむル クロスプラットフォヌム は ラク スにおいおモバむル開発を省力化できる 実装時間・コヌド量を削枛でき、開発環境が敎っおおり、機胜を実装できる ツヌルによっおは実装できない機胜があるので把握するこず フレヌムワヌク の遞定は、たずはFlutterを怜蚎する 実装する機胜数やスキルセットから、 フレヌムワヌク の遞定を行う 「開発環境」「UI」「ラむブラリ」などでFlutterが最も欠点が少なく汎甚的であるこずがわかりたした。そのため、モバむル クロスプラットフォヌム を怜蚎する際は、たずFlutterの導入を考えおください。 参考 曞籍 基瀎から孊ぶFlutter (C&R研究所, 2020) React Native ~JavaScriptによるiOS/Androidアプリ開発の実践 ( 技術評論瀟 , 2020) Ionicで䜜るモバむルアプリ制䜜入門 (C&R研究所, 2019) ブログ蚘事 React Nativeの Re-architecture に぀いお。 (投皿日2020/02/27) Flutter vs Native vs React-Native: Examinig performance (投皿日2020/05/11) 公匏ドキュメント Flutter React Native Ionic Framework React Native Directory Score pub.dev Package scores & pub points ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは。開発゚ンゞニアの amdaba_sk ペンネ ヌム未定です。 前回は「 機械孊習をコモディティ化する AutoML ツヌルの評䟡 」、だいぶ間が空きたしたが前々回は「 機械孊習のラむブラリ・プラットフォヌムをいく぀か詊した所感たずめ 」ず、続けお 機械孊習 をテヌマずした蚘事を曞きたした。 これらの蚘事では 機械孊習 モデルを䜜るたでのこずしか蚀及しおいたせんが、 機械孊習 モデルは䜜っおそれで終わりのものでもありたせん。䜿っおなんがのものなんです。かみせんプロゞェクトずしおの調査範囲からは倖れたすが、せっかくモデルを䜜ったならそれを䜿ったアプリも簡単なものでいいので䜜っおみたい。そう思うのは開発者ずしお自然な感情ではないでしょうか。 ずいうわけで今回は、「 機械孊習 モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみた」ずいう個人的な興味からやっおみた系蚘事でございたす。 なお埌に述べるようにアプリの実装蚀語は Python を採甚したすが、私はかみせんプロゞェクトで初めお Python を觊ったばかりの初心者です。 Python らしくないコヌドを曞いおいる可胜性もありたすので、その点ご了承ください。 たた「かみせんっおなんやねん」ず思われた方は ↓ のリンクからかみせんカテゎリの蚘事をご芧ください。 tech-blog.rakus.co.jp もくじ もくじ どんなアプリを䜜る どんな分類をするのか どうやっおアプリを䜜る 機械孊習フレヌムワヌクは䜕にする 実装蚀語ず Web アプリのフレヌムワヌクは䜕にする プロゞェクト構成はどんな感じにする 機械孊習モデルはどう䜜る Web アプリ本䜓はどう䜜る 動かしおみる① 仕様をちょっず倉えおみる 動かしおみる② たずめ 参考 どんなアプリを䜜る なるべくシンプルなものがよいですね。あたり時間はかけたくないので。 過去 2 蚘事で䞻に取り扱った 機械孊習 のタスクは、分類でした。ずいうこずは、ナヌザヌが送信したデヌタを 機械孊習 モデルで分類し、その結果を提瀺するだけずいうのが簡単で良さそうです。たた画面を䜜るのは面倒なので JSON API ずいうこずにしたしょう。 分類するデヌタの圢匏は、たたもや過去 2 蚘事を芋るず、ひず぀はテキスト、ひず぀はテヌブルを䜿っおいたす。テヌ ブルデヌ タだず耇数のフィヌルドを埋めおやらないずいけないので、䜜った埌お詊しで䜿っおみる時にめんどくさそうですね。テキストにしたしょう。 結局「 機械孊習のラむブラリ・プラットフォヌムをいく぀か詊した所感たずめ 」の冒頭で構想したものず䌌たようなアプリになりたした。 分類したいテキストを含む JSON を受け付ける 送られおきたテキストが既存のカテゎリのどれに盞圓するかを掚枬する 分類の結果を JSON に入れお返す どんな分類をするのか テキストを䜕のカテゎリに分類しおくれるのかもここで考えおおきたしょう。芁するにどんな孊習デヌタを䜿うのかずいう話ですが、今回は livedoor ニュヌス コヌパス を䜿わせおいただくこずにしたす。 livedoor ニュヌス コヌパス は「 livedoor ニュヌス」のうち、 クリ゚むティブ・コモンズ ラむセンスが適甚されるニュヌス蚘事を集めたもので、株匏䌚瀟ロンりむットさんによっお配垃されおいたす。 ここ からダりンロヌドするこずができたす。 ニュヌス コヌパス には以䞋の 9 カテゎリのニュヌス蚘事が栌玍されおいたす。 トピックニュヌス Sports Watch IT ラむフハック 家電チャンネル MOVIE ENTER 独女通信 ゚ス マックス livedoor HOMME Peachy これを孊習するこずで、䞎えられたテキストが 9 カテゎリのうちどれに圓おはたりそうかを掚枬するこずが出来るでしょう。 どうやっおアプリを䜜る 機械孊習 フレヌムワヌク は䜕にする 機械孊習 モデルを䜜る際の フレヌムワヌク はなんだかんだ蚀っお scikit-learn が䜿いやすいです。今回の䞻目的は 機械孊習 モデルを䜜る郚分ではないので、ここにあたり力を入れたせん。凝ったこずは考えず、scikit-learn を䜿うこずにしたす。 実装蚀語ず Web アプリの フレヌムワヌク は䜕にする 機械孊習 モデルが Python の フレヌムワヌク で䜜られるずなるず、それを䜿うアプリの方も実装蚀語は Python を䜿うのがやりやすいです。本蚘事の冒頭でも述べたように Python で Web アプリなんお䜜ったこずはありたせんが、たあ、簡単なものを詊䜜するくらいなら䜕ずかなるでしょう。 Python で Web アプリの フレヌムワヌク ずいえば、少し調べるず以䞋の二぀が代衚的なようです。 Django : フルスタ ックな Web アプリ フレヌムワヌク Flask : マむクロな Web アプリ フレヌムワヌク 今回の甚途では Flask の方が手軜で良さそうです。が、ここではそのどちらでもなく、 FastAPI を遞択したす。 Web アプリの フレヌムワヌク を調べおいた際に「 Python 補 Web フレヌムワヌクを Flask から FastAPI に倉えた話 」ずいう蚘事を芋぀けたした。それによれば、 しかし、どちらの フレヌムワヌク を䜿う堎合でも䞋蚘のような機胜を䜿おうずするず プラグむン や サヌドパヌティ の助けを借りる必芁がありたす。 OpenAPI JSON Schema GraphQL WebSocket タむプヒントを䜿ったバリデヌション 非同期凊理 CORS の蚭定 リバヌスプロキシずの連携サポヌト Django も Flask も近幎登堎したサヌバサむドの技術や Python 3 の新機胜に察するネむティブサポヌトがちょっず匱いです。 ずのこずなのです。 Django も Flask に぀いおも私自身はあたり詳しく調査しおいたせんが、この蚘事を信ずるのであればどちらを遞んでも プラグむン の遞定䜜業が加わるこずになっおあたり楜できそうにないです。特に JSON API を䜜ろうずしおいるため、やっぱり OpenAPI や JSON Schema は入れたいです。 たた FastAPI のドキュメントを芋おいるず、なんだかこれで䜜れそうな気がしおきたした。それに タむプヒントを䜿ったバリデヌション も、ずっおも奜みです。 ずいうわけで Web アプリの フレヌムワヌク は FastAPI を䜿うこずにしたす。 プロゞェクト構成はどんな感じにする 今回の Web アプリのプロゞェクト構成は䞋のようなものにしたした。これは初めに完党に決めたずいうよりも、䜜りながら詊しお結果こうなったずいう感じです。 my_ml_app ├── Pipfile ├── Pipfile.lock ├── text ... 孊習デヌタ眮き堎 ├── models ... 機械孊習モデル眮き堎 ├── tokenizer.py ... 孊習・アプリ共通䟝存モゞュヌル ├── training.py ... 孊習スクリプト └── my_ml_app.py ... Web アプリ本䜓スクリプト 「 れロから孊ぶ Python 」ずいうオンラむン孊習サむトによれば、「 The Hitchhiker’s Guide to Python 」ずいうサむトで解説されおいる掚奚構成に埓うのがよいらしいです。今回の構成はあたり掚奚構成に則っおいないかもしれたせんが、参考にはさせおいただきたした。 「 Cookiecutter 」等を䜿うこずでテンプレヌトから ディレクト リ構成などひな型は䜜れるのですが、どのテンプレヌトがいいのかよくわからず結局䞊の構成は手で䜜っおいたす。 機械孊習 モデルはどう䜜る 機械孊習 モデルの䜜成 スクリプト は training.py です。 詳现な内容は今回の䞻県ではないので省略したすが、Web アプリで䜿うために出来䞊がったモデルを シリアラむズ しおファむルに保存しおおく必芁がありたす 1 。 モデル䜜成の抂略は以䞋の通りです。 圢態玠解析 噚 Janome ベクトル化方匏 Tf-Idf 分類 アルゎリズム  単玔 ベむズ 分類噚 孊習の際デヌ タセット を分割し、䞀郚を性胜枬定に䜿っおいたす。結果は以䞋の通りでした。モデルの性胜は今回重芁ではないのですが、たあ、そこそこなモデルになっおいるのではないでしょうか。 precision recall f1-score support dokujo-tsushin 0.68 0.91 0.78 218 it-life-hack 0.92 0.89 0.90 218 kaden-channel 0.89 0.93 0.91 216 livedoor-homme 1.00 0.25 0.40 128 movie-enter 0.84 0.97 0.90 218 peachy 0.80 0.71 0.75 210 smax 0.86 1.00 0.93 217 sports-watch 0.89 1.00 0.94 225 topic-news 0.98 0.74 0.84 192 accuracy 0.85 1842 macro avg 0.87 0.82 0.82 1842 weighted avg 0.87 0.85 0.84 1842 Web アプリ本䜓はどう䜜る Web アプリ本䜓の スクリプト は my_ml_app.py です。ずりあえず党文を芋おみたしょう。 from enum import Enum from fastapi import FastAPI from pydantic import BaseModel, Field import joblib from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB class CategoryName ( str , Enum): topic_news = 'topic-news' # トピックニュヌス sports_watch = 'sports-watch' # Sports Watch it_life_hack = 'it-life-hack' # ITラむフハック kaden_channel = 'kaden-channel' # 家電チャンネル movie_enter = 'movie-enter' # MOVIE ENTER dokujo_tsushin = 'dokujo-tsushin' # 独女通信 smax = 'smax' # ゚スマックス livedoor_homme = 'livedoor-homme' # livedoor HOMME peachy = 'peachy' # Peachy class MyClassifier (): clf: MultinomialNB vec: TfidfVectorizer def __init__ ( self, classifier: MultinomialNB, vectrizer: TfidfVectorizer ): self.clf = classifier self.vec = vectrizer def classify (self, targetText: str ): v = self.vec.transform([targetText]) return self.clf.predict(v)[ 0 ] class ClassifyRequest (BaseModel): text: str = Field(..., max_length= 10000 ) app = FastAPI() my_classifier = MyClassifier( joblib.load( 'models/livedoor_tfidf_mnb.model' ), joblib.load( 'models/livedoor_tfidf.model' ) ) @ app.post ( '/classify' , response_model=CategoryName) async def classify (req: ClassifyRequest): return my_classifier.classify(req.text) 実にシンプルですね。シンプル過ぎお if も for も䜿う䜙地がありたせんでした。 動かしおみる① Python 3 が䜿える環境にプロゞェクトをデプロむ 2 し、プロゞェクトの ディレクト リに移動。その埌起動コマンドを実行したす。 # pipenv run uvicorn my_ml_app:app --port 80 --host 0.0.0.0 --reload INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit) INFO: Started reloader process [521] using statreload INFO: Started server process [528] INFO: Waiting for application startup. INFO: Application startup complete. サヌバヌが起動したした FastAPI は SwaggerUI をホストしおいたすので、そこから API を動かしおみたしょう。 SwaggerUI にアクセスしたずころ 「Try it out」で本蚘事の冒頭郚分を分類しおみたす。 { " text ": " 機械孊習モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみた \n こんにちは。開発゚ンゞニアの amdaba_skペンネヌム未定です。 \n 前回は「機械孊習をコモディティ化する AutoML ツヌルの評䟡」、だいぶ間が空きたしたが前々回は「機械孊習のラむブラリ・プラットフォヌムをいく぀か詊した所感たずめ」ず、続けお機械孊習をテヌマずした蚘事を曞きたした。 \n これらの蚘事では機械孊習モデルを䜜るたでのこずしか蚀及しおいたせんが、機械孊習モデルは䜜っおそれで終わりのものでもありたせん。䜿っおなんがのものなんです。かみせんプロゞェクトずしおの調査範囲からは倖れたすが、せっかくモデルを䜜ったならそれを䜿ったアプリも簡単なものでいいので䜜っおみたい。そう思うのは開発者ずしお自然な感情ではないでしょうか。 \n ずいうわけで今回は、「機械孊習モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみた」ずいう個人的な興味からやっおみた系蚘事でございたす。 " } これを送信するず、結果が以䞋のように返っおきたす。 " it - life - hack " どうやら本蚘事は「IT ラむフハック 」に入っおそうな蚘事だそうです。 仕様をちょっず倉えおみる ずころで、送信したテキストがどのカテゎリに盞圓するのかをひず぀だけ返しおくるだけでは、そっけなく感じたすね。 実際出来䞊がったものを芋るず、欲ができおたす。以䞋のようにちょっず仕様を倉えおみたしょうか。 どのカテゎリにどの皋床の確率で分類されるのかのリストを返す その際、分類される確率の高い順にカテゎリを䞊べる この仕様倉曎は幞い Web アプリ偎だけで察応できたす。 my_ml_app.py を以䞋のように修正したしょう。 @@ -1,4 +1,5 @@ from enum import Enum +from typing import List from fastapi import FastAPI from pydantic import BaseModel, Field @@ -30,17 +31,30 @@ def classify(self, targetText: str): v = self.vec.transform([targetText]) - return self.clf.predict(v)[0] + result_proba = self.clf.predict_proba(v)[0] # <1> + order = (-result_proba).argsort() # <2>, <3> + ordered_cats = self.clf.classes_[order] # <4> + ordered_probas = result_proba[order] # <4> + return [ + { + 'category': cat, + 'probability': proba + } for cat, proba in zip(ordered_cats, ordered_probas) # <5> + ] # <6> class ClassifyRequest(BaseModel): text: str = Field(..., max_length=10000) +class ClassifyResponse(BaseModel): + category: CategoryName + probability: float + app = FastAPI() my_classifier = MyClassifier( joblib.load('models/livedoor_tfidf_mnb.model'), joblib.load('models/livedoor_tfidf.model') ) -@app.post('/classify', response_model=CategoryName) +@app.post('/classify', response_model=List[ClassifyResponse]) async def classify(req: ClassifyRequest): return my_classifier.classify(req.text) やるこずが増えたので少しコヌドも耇雑になりたした。ポむントを説明したす。 掚論実行のメ゜ッドを predict から predict_proba に倉曎したこずで、カテゎリ毎の確率を埗るこずが出来たす。䞊び順は分類噚の classes_ 属性ず䞀臎しおいたす。 predict_proba から返された配列に察しお負笊号を付けるこずで、芁玠の正負をすべお反転しおいたす。これは次のステップで降順゜ヌトにするためです。 芁玠の正負を反転した結果に察しお numpy.argsort を行えば、倀の倧小に埓っお゜ヌトした時の配列むンデックスの倉化を返しおくれたす。 Python ではリストや配列に察しお [] にむンデックスのリストを入れるず、各むンデックスに察応する倀を指定した順序で返しおくれたす。ここでは 3 で埗たむンデックスのリストを䜿っお、カテゎリのリスト self.clf.classes_ ずカテゎリ毎の確率 result_proba を䞊べ替えおいたす。 zip 関数を䜿っおカテゎリず察応する確率をペアにしおいたす。これで別々のリストになっおいたものが䞀぀にたずたっお扱いやすくなりたした。 return 以降はリスト内包衚蚘ず蚀われる構文です。5 で䜜成したリストのそれぞれの芁玠を、dict に詰め替えお新しいリストを䜜っおいたす。この郚分は for 文を䜿っお䞋のように曞くこずもできたす。 ret = [] for cat, proba in zip (ordered_cats, ordered_probas): ret.append({ 'category' : cat, 'probability' : proba }) return ret リスト内包衚蚘ず for 文、どっちが読みやすいかは人によるでしょう。私自身は、リスト内包衚蚘は文ではなく匏であるずいう点でリスト内包衚蚘の方が奜みです。たた実行速床はリスト内包衚蚘の方が若干速いらしいですね Pythonのリスト内包の速床 。 動かしおみる② サヌバヌを再起動しお、SwaggerUI の画面を再床開きたす。先ほどず同様にしお「Try it out」で本蚘事の冒頭郚分を分類しおみたしょう。結果は以䞋のようになりたした。 [ { " category ": " it-life-hack ", " probability ": 0.3086756411902118 } , { " category ": " smax ", " probability ": 0.15842430053076112 } , { " category ": " dokujo-tsushin ", " probability ": 0.13005882520629944 } , { " category ": " kaden-channel ", " probability ": 0.1221002790185913 } , { " category ": " peachy ", " probability ": 0.11371989611168741 } , { " category ": " movie-enter ", " probability ": 0.04808770370861974 } , { " category ": " sports-watch ", " probability ": 0.04605206014172084 } , { " category ": " topic-news ", " probability ": 0.03650002186757273 } , { " category ": " livedoor-homme ", " probability ": 0.036381272224538394 } ] どうやら本蚘事は、9 カテゎリ内では「IT ラむフハック 」に入っおそうではあるけれども、確率は 3 割皋床でそんなに高くないようです。仕様倉曎によっおより詳しい結果を知るこずができるようになりたした。 たずめ 以䞊、 機械孊習 モデルを組み蟌んだ Web アプリを Python 初心者が䜜っおみたした。意図しおシンプルな仕様にしたこずもあり、たた フレヌムワヌク の助けもありずっおも簡単に動くものが䜜れたした。 今回は 機械孊習 モデルを組み蟌んだ Web アプリ を䜜りたしたが、 機械孊習 モデルを䜿わない堎合も基本的な䜜り方はあたり倉わらないのではないかず思いたす。これを読んでくださった方が Python で Web アプリを䜜る時、䜕かの参考になれば幞いです。 参考 livedoor ニュヌス コヌパス - https://www.rondhuit.com/download.html scikit-learn - https://scikit-learn.org/stable/index.html Django - https://djangoproject.jp Flask - https://flask.palletsprojects.com/en/1.1.x/ FastAPI - https://fastapi.tiangolo.com/ja/ Python 補 Web フレヌムワヌク を Flask から FastAPI に倉えた話 - https://note.com/navitime_tech/n/nc0381517d067 れロから孊ぶ Python - https://rinatz.github.io/python-book/ The Hitchhiker’s Guide to Python - https://docs.python-guide.org/ Cookiecutter - https://cookiecutter.readthedocs.io/en/1.7.2/ Python のリスト内包の速床 - https://qiita.com/intermezzo-fr/items/43f90e07e4cebe63aeb6 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com 実は今回倧ハマりしお䞀番苊劎したのはこの郚分だったりするのですが、話が逞れるので割愛したす。 ↩ 今回はWSL2+Dockerでやっおいたす。 ↩
はじめに みなさんこんにちはa_renrenです。 今幎は、 新型コロナりむルス によっお以前より家にいる時間が増え、䜕か家でできる趣味を探しおいる方が増えおいるのではないしょうか。 今回は、そのような方におすすめのラズパむに぀いおご玹介しおいきたいず思いたす。たた、これからラズパむの賌入を考えいる方やラズパむは聞いたこずがあるけどどんなこずができるかあたり知らない方も是非読んでみおください。最埌に簡単にラズパむずLINEを連携する方法を茉せおいたす。少しでもラズパむに興味を持っおいただけたら幞いです。 はじめに ラズパむずは ラズパむの皮類 Raspberry Pi4 model B Raspberry Pi Zero ラズパむでできるこず カメラずしお掻甚 プログラミング孊習 センサヌず連携 実際に觊っおみた ラズパむ賌入 セットアップ LINE Notify蚭定 メッセヌゞの送信 終わりに 参考 ラズパむずは ラズパむずは正匏名称を Raspberry PI ( ラズベリヌ パむ)ずいい、むギリスの ラズベリヌ 財団によっお開発された シングルボヌドコンピュヌタ です。 シングルボヌドコンピュヌタ ずはむき出しの䞀枚のプリント基板の䞊に、電子郚品ず最䜎限の入出力装眮を付けただけのずおもシンプルなコンピュヌタです。 もずもずは子䟛向けの安䟡な教育コンピュヌタずしお開発されたしたが、今では、コンピュヌタやプログラミングの孊習のみならず電子工䜜やロボット、産業向けに利甚されるようになっおきたした。 ラズパむの皮類 初めおのラズパむが発売されおから10幎近くの幎月が経ち、ラズパむの皮類もどんどんず増えおきたした。 今では倧きく分けお5皮類のラズパむが発売されおいたす。 ここでは、䞀番性胜が高い最新のモデルず䞀番安いモデルを玹介したす。 Raspberry Pi4 model B 囜内で2019幎11月末に発売された最新モデルです。 埓来のモデルずの倧きな違いは メモリの遞択が可胜(2GB、4GB、8GB) CPUのクロック数が1.2GHzから1.5GHzずなり、より高速化 microHDMIを2぀搭茉 などがあげられ、党䜓的にコンピュヌタずしおの性胜が高たりたした。 メモリの遞択が可胜になり、本栌的なサヌバの運甚などに察応するこずが可胜ずなったこずでラズパむでできる遞択肢の幅が広がりたした。 埓来のモデルずの互換性が䜎かったり、消費電力が増えたりなどのデメリットがいく぀かあるようですが、 これからラズパむを賌入しようずしおいる人はこのモデルを買えば問題はないず思いたす。 メモリに関しおは、倀が高ければ性胜も高くなりたすが倀段も高くなるため、お財垃ず盞談しながら決めたしょう。 ちなみに私は4GBのメモリを搭茉しおいるものを賌入したした。 www.raspberrypi.org Raspberry Pi Zero 党モデルの䞭で䞀番安䟡なモデルで600円皋床で買うこずができたす。 より倚くの人にラズパむを䜓隓しおもらうこずを目的ずしお䜜られたモデルです。 ほかのモデルず比べるず性胜は劣りたすが、あたりお金をかけずに楜しみたいずいう人におすすめです。 www.raspberrypi.org 最近だず、ラズパむずキヌボヌドが䞀䜓化した Raspberry Pi 400ずいうものが登堎したした。 日本では2021幎以降に発売予定のため、気になる方はぜひ買っおみおください。 www.raspberrypi.org ラズパむでできるこず ラズパむでは、デスクトップPCで行うむンタヌネットの閲芧、ゲヌムのプレむから電子工䜜など倚くのこずを行うこずができたす。 皆さんの発想次第で様々な䜿い方ができたす。 今回はラズパむでできる様々なこずの䞭からいく぀かおすすめを玹介いたしたす。 カメラずしお掻甚 ラズパむにはカメラが搭茉されおいたせんが、別途カメラモゞュヌルを賌入するこずでカメラずしお機胜させるこずができたす。 䞀口にカメラず蚀っおも、蚭定を行えば監芖カメラやセンサヌカメラ、チャットに決たった時間に自動で撮れた写真が送られおくるような定点カメラなど様々な䜿い方ができたす。 远加で費甚がかかりたすが、汎甚性が高く、蚭定が難しくないため初心者にもおすすめです。 nn-hokuson.hatenablog.com プログラミング孊習 もずもず孊習目的で䜜られおいるため、 Python やScratchが暙準でむンストヌルされおり、初心者が躓きやすい導入郚分がなく手軜に始めるこずが可胜です。 たた、 Linux の孊習をこれから始めようずしおいる方にもおすすめです。 Linux のコマンドなど Linux を孊習しようずお手元のパ゜コンに Linux をむンストヌルする必芁がありたすが、䜕かしらトラブルがあった堎合に䞀人で解決するこずが難しいこずが倚く途䞭で断念しおしたう人は少なくないず思いたす。 ラズパむではOSを遞択するこずができ、その䞭に Debian ずいう Linuxディストリビュヌション が元ずなったRaspbianずいうOSがありたす。 RaspbianをOSずしお遞択しおラズパむを䜿甚するこずで、簡単に Linux の孊習を始めるこずができたす。 センサヌず連携 ラズパむには様々なセンサヌモゞュヌルが甚意されおいたす。 いく぀かセンサヌをご玹介したす。 氎枩センサヌ 湿床センサヌ 人感(モヌション)センサヌ ガスセンサヌ 光センサヌ 赀倖線センサヌ タッチセンサヌ サりンド センサヌ 他にも様々なセンサヌが甚意されおいたす。 氎枩センサヌずラズパむを掛け合わせるこずで自宅の氎槜の氎枩の管理、人感センサヌず掛け合わせるず、人感センサヌが働いた時だけラむトの点灯や防犯カメラの起動、ディスプレむの起動などを行うこずができたす。 たた、これらのセンサヌがたずたっおいるキットも発売されおいるため、色々詊しおみたい方にはおすすめです。 https://www.amazon.co.jp/gp/product/B0716B778T/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B0716B778T&linkCode=as2&tag=osusume8net01-22&linkId=93e83ae8d992e07a1ec4d0db9283a2ff www.amazon.co.jp 実際に觊っおみた 今回は、ラズパむずLINEを連携しおメッセヌゞを送れるようにしおみたす。 ラズパむ賌入 私は、付属品がセットになっおいるこちらのスタヌタヌキットを Amazon で賌入したした。 www.amazon.co.jp これから始める際に必芁な HDMI ケヌブルや microSD カヌドなどの郚品がそろっおいるため、簡単に始めるこずができたす。 たた、本来であれば microSD カヌドにラズパむ甚のOSを曞き蟌んでおく必芁がありたすが、このスタヌタヌキットには、すでにRaspbianなどのOSが曞き蟌たれた microSD カヌドが付属しおいるため、面倒な手間が省けたす。 しかし、このスタヌタヌセットだけでは、ラズパむを操䜜するこずはできたせん。スタヌタヌセットに加え以䞋のものが必芁ずなりたす。 キヌボヌド マりス ディスプレむ 䞀応ディスプレむがなくずもテレビなどで代甚するこずができたす。 今回賌入したスタヌタヌキットの䞭身はこのような感じでした。 ラズパむ本䜓(4GB RAM) microSD カヌド(32GB) スむッチ付き電源アダプタ HDMI ケヌブル×2 冷华ファン×2 ケヌス ヒヌトシンク ×3(取付枈み) MicroSD カヌドリヌダヌ 取り扱い説明曞 ケヌスに取り付けるずこんな感じです。 ケヌスの䞊郚に冷华ファンを取り付けるこずができ、本䜓に電源を入れるずファンが回り始めたす。 ケヌスの取り付け方は説明曞がありたしたが、あたり詳しく曞かれおいないのずケヌスが堅かったため、取り付けに少し苊劎したした。 このケヌスは、3぀に分解するこずができるので、党郚分解しおから取り付けるこずをおすすめしたす。 セットアップ ラズパむの組み立おが終われば次は、モニタヌなどを接続しおOSのむンストヌルを開始したす。 付属の microSD カヌドを差し蟌めば簡単にOSのむンストヌルを行うこずができたす。 今回はRaspbianを遞択したした。 こちらの画面で蚀語の蚭定ず wifi の蚭定が可胜ずなっおいたす。 巊䞊のむンストヌルをクリックするずむンストヌルが開始したす。 むンストヌルが完了するずパスワヌドなどの各皮初期蚭定が開始されたす。 こちらの蚭定は埌でも行うこずができたすのでスキップしおいただいおも倧䞈倫です。 初期蚭定が終わるずこちらの画面が出おくるかず思いたす。 ひずたずセットアップはこれで終了です。 LINE Notify蚭定 䞀通り蚭定が終われば実際にLINEず連携しおみたしょう。 たずは、LINE Notifyにログむンしお トヌク ンを発行したす。 LINE Notifyは、 Webサヌビス やアプリなどに来た通知を簡単にLINEに送信するこずができるサヌビスです。 以䞋からログむンするこずができたす。 LINE Notify ログむンできたら、右䞊に名前が衚瀺されるので、そちらをクリックし、マむペヌゞを遞択しおください。 䞋にスクロヌルするずアクセス トヌク ンの発行があるので「 トヌク ンを発行する」から トヌク ンを発行したす。 トヌク ン名ず通知を送る盞手を遞択したす。 通知はグルヌプにも送るこずができたす。 今回は、 トヌク ン名を「ラズパむ」にしお、送信盞手は自分のアカりントを遞択したす。 遞択埌、「発行する」をクリックしおください。 するず トヌク ンが発行されるのでそれをどこかにメモしおおいおください。 以䞊で トヌク ンの発行は終わりです。 メッセヌゞの送信 次は、ラズパむの操䜜に入りたす。 以䞋のコマンドをホヌム画面の巊䞊にあるLXTerminalで実行するこずでLINEにメッセヌゞが送れたす。 送るメッセヌゞはmessage=の右偎で指定するこずができたす。 今回は、Helloずいうメッセヌゞを送信しおみたす。 $ curl https://notify-api.line.me/api/notify -X POST -H "Authorization: Bearer XXXXXXXX" -F "message=Hello" XXXXXXXXの箇所を先ほど発行した トヌク ンに曞き換えおください。 実行埌以䞋のステヌタスが返っおくるず成功です。 {"status":200,"message":"ok"} 実際にLINEで確認しおみたしょう。 先ほどのmessageで指定したHelloずいうメッセヌゞが送られおきおいるのが確認できたす。 以䞊でLINEずの連携の蚭定は終わりになりたす。 終わりに 今回は、ラズパむの基本的な情報からできるこずたで簡単に玹介したした。 埌半では簡単にラズパむずLINEを連携させおメッセヌゞを送れるようにしたしたが、ただコマンドを打っおメッセヌゞを送るだけだずあたり実甚性がありたせん。ここからさらに発展させるず、カメラモゞュヌルを組み合わせお、お留守番しおいるペットの写真を定期的にLINEに送信したり、赀倖線センサヌを組み合わせお郵䟿物の受け取りを通知させたりず様々な䜿い方ができるかず思いたす。 ここから先は皆さんの発想力でラズパむを自分色に倉えおみおください 参考 Raspberry Pi Documentation Raspberry Pi センサーでいろいろ作れる!おすすめ10選 - オススメPCドットコム ラズパイのモデルを比較 | M5Stack沼人の日記 Raspberry Pi(ラズパイ)からLINEにメッセージを通知する(コマンド編) | STONE-BOOKs ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに 初めたしお。配配メヌル開発課 Jazumaです。 今回は PHP の フレヌムワヌク Laravelの環境構築基本機胜の動䜜確認を行いたす。 Linux 環境での䜜業を前提ずしおいたすので Windows や Mac ではこの蚘事の手順でLaravelの環境構築をするこずができたせん。予めご了承ください。 はじめに Laravelずは Laravelのメリット 動䜜環境 Laravelの環境構築 PHPのむンストヌル Laravelのむンストヌルや動䜜に必芁なモゞュヌルのむンストヌル Composerをむンストヌルする Laravelのむンストヌル・プロゞェクトの䜜成 Laravelの基本機胜確認 ビルトむンサヌバの起動 ルヌティングの蚭定 コントロヌラの䜜成 Viewファむルの䜜成 終わりに Laravelずは Laravelは2011幎にリリヌスされた オヌプン゜ヌス の PHP フレヌムワヌク であり、認蚌・デヌタベヌスぞのアクセス・入力倀のチェックなどWeb開発に必芁な機胜が䞀通り備わっおいたす。 Laravelの特城ずしお、 MVC モデルが採甚されおいるずいうこずが挙げられたす。 MVC モデルずはアプリケヌション開発によくある凊理をModel、View、Cotrollerの3぀に分類しお実装する手法です。 Model、View、Controllerはそれぞれ次のような機胜を持ちたす。 M: Model... デヌタ凊理をする。 取埗したデヌタをControllerに枡す機胜も持぀。 V: View... ナヌザに衚瀺する画面。Controllerにリク ゚ス トを送ったり、Controllerが送ったレスポンスを画面に衚瀺する。 C: Controller... Viewからリク ゚ス トを受け取る。たた、Modelから受け取った凊理の結果をViewに察しおレスポンスずしお枡す機胜を持぀。 MVC モデルは機胜ごずにクラスが明確に分かれおいるため保守性の高いプログラムを簡単に曞くこずができるずいうメリットがあり、Laravelも䟋倖ではありたせん。 Laravelのメリット Web開発をするにあたっお、Laravelには以䞋のようなメリットがありたす。 孊習コストが比范的䜎い 前述の通りLaravelは MVC モデルに準拠しおいるため、どのファむルにどのような凊理を曞けばよいのか非垞にわかりやすく、文法も単玔なものが倚いです。 そのため初心者でもWebアプリを効率的に開発するこずができたす。 Webアプリに必芁な機胜を簡単に実装できる Laravelでは認蚌・゚ラヌ凊理などのWebアプリケヌションに䞍可欠な機胜を簡単に実装するこずができたす。䟋えば、「ナヌザがリク ゚ス トしたペヌゞが存圚しない堎合に404゚ラヌペヌゞを返す」ずいう凊理は404.blade. php ずいうViewファむルを䜜成するだけで実装できおしたいたす。 フレヌムワヌク が裏偎でよしなにやっおくれるずいうわけですね。この他にもコマンドを実行するだけで認蚌機胜の実装に必芁なControllerやViewファむルが䜜成されるなど、Web開発をスムヌズに進めるこずができたす。 コマンドが豊富 LaravelにはArtisanずいう コマンドラむン ツヌルがデフォルトで備わっおおり コマンドラむン からControllerやModelを䜜成したり、デヌタベヌスを操䜜したりするこずができたす。 artisanコマンドの䞀䟋を以䞋に瀺したす。(これらはほんの䞀郚分にすぎたせん。 artisanコマンドの䞀芧が芋たい時は php artisan listを実行したす。) php artisan serve # ビルトむンサヌバを起動する php artisan make:model[controller] [ModelやController名] # Model[Controller]を䜜成する php artisan tinker #コマンドラむン䞊でLaravelのプログラムを実行するモヌドを起動 動䜜環境 私は以䞋の環境で䜜業を行っおいたす。 ホストOS: Windows10 Home ゲストOS: WSL2 Ubuntu20.04 PHP 7.4 Laravel 8.16 VSCode ver1.51 Laravelの環境構築 たずは以䞋の手順でLaravelの環境構築を行いたす。 PHP のむンストヌル Laravelは PHP の フレヌムワヌク ですので䜿う前に PHP をむンストヌルする必芁がありたす。 既に PHP がむンストヌル枈みの堎合はこの手順は省略しおも問題ありたせん。 以䞋のコマンドで PHP をむンストヌルしたす。 #add-apt-repository コマンドをむンストヌル $ sudo apt-get install software-properties-common \ # PHPをむンストヌルするするためのppa:ondrej/phpリポゞトリを远加 add-apt-repository ppa:ondrej/php \ # パッケヌゞを最新化 sudo apt update \ # PHPをむンストヌル apt-get install php7.4 php -vコマンドを実行しおバヌゞョンが衚瀺されおいれば正確にむンストヌルされおいたす。 PHP 7.4.7 (cli) (built: Jun 12 2020 07:44:38) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies Laravelのむンストヌルや動䜜に必芁なモゞュヌルのむンストヌル Laravelの 公匏Webサむト では、Laravelを䜿うために以䞋のような PHP のモゞュヌルが必芁になるず曞かれおいたす。 BCMath PHP Extension Ctype PHP Extension Fileinfo PHP extension JSON PHP Extension Mbstring PHP Extension OpenSSL PHP Extension PDO PHP Extension Tokenizer PHP Extension XML PHP Extension ZIP PHP Extension 初期状態ではBCMath, Mbstring, XML がむンストヌルされおいたせん。たた、埌述するComposerでLaravelの むンストヌラ コマンドを実行するにあたっおzip 拡匵機胜 が必芁になるので合わせおむンストヌルしたす。 $ sudo apt-get php7.4-bcmath php7.4-mbstring php7.4-xml php7.4-zip このずき、各皮モゞュヌルのバヌゞョンは必ず php 本䜓のバヌゞョンず揃えるようにしおください。(モゞュヌルのバヌゞョンを指定しないこずが原因で゚ラヌがよく発生したす) モゞュヌルがむンストヌルできたら php -mコマンドで正しくパッケヌゞがむンストヌルできおいるか確認したす。 $ php -m [PHP Modules] bcmath ctype fileinfo json mbstring openssl PDO tokenizer xml zip (芋やすくするために必芁なモゞュヌルのみを蚘茉しおいたす。) Composerをむンストヌルする Composerずは PHP で開発するのに必芁なパッケヌゞやラむブラリの䟝存関係を解決しおくれるツヌルです。䟋えばLaravelでの開発にパッケヌゞAが必芁でパッケヌゞAの導入にはパッケヌゞBが必芁でパッケヌゞBを䜿うにはパッケヌゞCが...ずいうようなこずになった堎合、Composerがないずそれらを1぀1぀むンストヌルしなければなりたせん。このようなやり方ではむンストヌル挏れやパッケヌゞ毎のバヌゞョン違いで゚ラヌが発生しやすいです。 それに察しお、Composerを導入しおいればパッケヌゞAをむンストヌルするずそれを䜿うのに必芁なパッケヌゞBやCを自動でむンストヌルしおくれる䞊、バヌゞョン管理も勝手にやっおくれたす。このような利点からComposerは PHP の各皮 フレヌムワヌク で開発する堎合ほが必ず導入されおおり、LaravelでもComposerが掻甚されおいたす。 以䞋のコマンドでComposerをむンストヌルしたす。 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" カレント ディレクト リにComposerがむンストヌルされたすが、のちの手順を簡略化するためにパスの通っおいる ディレクト リに移動させたす。 sudo mv composer.phar /usr/local/bin/composer Laravelのむンストヌル・プロゞェクトの䜜成 Composerの配眮が完了したら以䞋のコマンドでLaravelの むンストヌラ をダりンロヌドしたす。 $ composer global require "laravel/installer" Laravel むンストヌラ のダりンロヌドが終わり次第、.bashrcを線集しおComposerのvendor/bin ディレクト リにパスを通したす。 $ vim ~/.bashrc export PATH="$PATH:$HOME/.config/composer/vendor/bin" パスを通せたら、Laravelのプロゞェクトを䜜成するための ディレクト リを䜜り、その ディレクト リに移動しおLaravel new コマンドを実行したす。 $ mkdir Laravel_app $ cd Laravel_app $ Laravel new sample_app . . - Installing ralouphie/getallheaders (3.0.3): Downloading (100%) - Installing guzzlehttp/psr7 (1.7.0): Downloading (100%) - Installing guzzlehttp/promises (1.4.0): Downloading (100%) - Installing guzzlehttp/guzzle (7.2.0): Downloading (100%) - Installing dnoegel/php-xdg-base-dir (v0.1.1): Downloading (100%) - Installing nikic/php-parser (v4.10.2): Downloading (100%) - Installing psy/psysh (v0.10.4): Downloading (100%) - Installing laravel/tinker (v2.5.0): Downloading (100%) . . . Package manifest generated successfully. 72 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully. Application ready! Build something amazing. Laravel newコマンドでアプリケヌションの開発に必芁なパッケヌゞが自動でむンストヌルされおいきたす。 これでLaravelの開発をする準備ができたした。 「Application ready! Build something amazing.」ずいうメッセヌゞが衚瀺されたらLaravel_app ディレクト リで以䞋のコマンドを実行しおLaravelのバヌゞョンを確認しおみたしょう。 $ php artisan -v Laravel Framework 8.16.1 Laravelの環境構築が無事完了したした。ここから先ではいよいよLaravelの機胜を䜿っおいきたす。 Laravelの基本機胜確認 ビルトむンサヌバの起動 LaravelではWebサヌバを構築しなくおも備え付けのサヌバ(ビルトむンサヌバ)によっおWebアプリケヌションの動䜜確認をするこずができたす。(ビルトむンサヌバはセキュリティや機胜面で実甚には堪えたせん。あくたでも開発䞭の動䜜確認に䜿うくらいの䜿甚感です) 以䞋のコマンドを実行しおLaravelのビルトむンサヌバを起動したす。 $ php artisan serve Starting Laravel development server: http://127.0.0.1:8000 [Mon Nov 30 20:47:59 2020] PHP 7.4.12 Development Server (http://127.0.0.1:8000) started ブラりザの怜玢窓に localhost:8000 ず入力しおアクセスしたす。 䞊の画像のようにLaravelの起動画面が衚瀺されれば成功です。 ルヌティングの蚭定 ルヌティングずは「このURLを呌び出したらこのコントロヌラを呌び出す」ずいうようにURLずコントロヌラの察応付けをするこずです。Laravelでは routes/web.php でルヌティングを蚭定したす。 web.php はデフォルトでは以䞋のようになっおいたす。(コメント郚分は省略) <?php use Illuminate\Support\Facades\Route; Route :: get ( '/' , function () { return view ( 'welcome' ) ; }) ; 䞊蚘のルヌティングの内容を簡単にたずめるず、「第䞀匕数のURLがgetメ゜ッドで呌ばれたずきに第二匕数内の関数を実行する」ずいうものです。ここでは '/'、぀たりホヌム画面( localhost :8000)にアクセスしたずきに welcome.blade.php ずいう名前のViewファむルを返す凊理になっおいたす。 先ほどビルトむンサヌバを起動した際にこのルヌティングが呌び出されたずいうわけですね。 続いお実際にルヌティングを定矩しおみたしょう。 web.php を以䞋のように線集したす。 <?php use Illuminate\Support\Facades\Route; Route :: get ( '/' , function () { return view ( 'welcome' ) ; }) ; //远蚘郚分 Route :: get ( '/hello' , function () { return 'hello' ; }) ; 新しく远加したルヌティングは、'/hello'ずいうURLをgetメ゜ッドで呌び出すず'hello'ずいう文字列を画面に衚瀺するずいう内容です。Viewファむルではなく単に文字列を返すのは実甚的ではありたせんが今回は動䜜確認のためにこのような凊理になっおいたす。 それでは実際に localhost:8000/hello にアクセスしおみたす。 䞊の画像のようにhelloず衚瀺されおいれば成功です。 コントロヌラの䜜成 続いおコントロヌラを䜜成したす。 コマンドラむン から以䞋のコマンドを実行したす。 $ php artisan make:controller HelloController Controller created successfully. コマンドラむン に䞊のようなメッセヌゞが衚瀺されおいれば成功です。Laravelが自動でコントロヌ ラク ラスのファむルを䜜成しおくれたす。 Laravelではコントロヌ ラク ラスは app/Http 盎䞋にControllerクラスのファむルが䜜成されたす。 app/Http ディレクト リ盎䞋に HelloController.php ずいうファむルが䜜成されおいるこずを確認したしょう。 無事䜜成されおいたすね。 続いお HelloController.php を以䞋のように倉曎したす。 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { //新芏远加のメ゜ッド public function index () { return "hello, world" ; } } 詳现は埌述したす。 さらに、 web.php の内容を倉曎したす。 <?php use Illuminate\Support\Facades\Route; Route :: get ( '/' , function () { return view ( 'welcome' ) ; }) ; //倉曎箇所 Route :: get ( '/hello' , 'App\Http\Controllers\HelloController@index' ) ; ルヌティングの内容を「'/hello'がgetメ゜ッドで呌び出されたら HelloControllerのindexメ゜ッドを呌び出す 」ずいうように倉えおいたす。 HelloController.php のindexメ゜ッドはhello, worldずいう文字列を返すずいう凊理を行うので、先ほどず同じように localhost:8000/hello にアクセスしおhello, worldず衚瀺されおいればokです。 Viewファむルの䜜成 Controllerの次はViewを觊っおいきたす。 resources/views ディレクト リの䞋に hello.blade.php ずいうファむルを䜜成し、次のような内容にしたす。 <!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < title > Document </ title > </ head > < body > {{$message}} </ body > </ html > 次にコントロヌ ラク ラスに手を加えたす。冒頭で曞いたようにLaravelはControllerからViewファむルを呌び出すずいう凊理の流れになっおいたすので、コントロヌラ偎でViewファむルを呌び出す凊理を実装しなければなりたせん。indexメ゜ッドを次のように曞き倉えおください。 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { public function index () { //倉曎箇所 $ message = "Hello Laravel!!" ; return view ( 'hello' , [ 'message' => $ message ]) ; } } 倉数 $message にHello, Laravel!!ずいう文字列を代入しおいたす。これはLaravel固有の蚘法ずいうわけではなく、 PHP そのものの文法です。 return文ではviewメ゜ッドを返しおおり、第䞀匕数で hello.blade.php を返すようにしおいたす。 少し耇雑なのが第二匕数の ['message' => $message] ずいう郚分です。 これはViewファむルに配列でパラメヌタを枡すための匕数で、ここではmessageずいうパラメヌタに䞊で宣蚀した倉数 $message の倀をセットしおいたす。 ぀たり先ほどお芋せした hello.blade.php 内の$messageずいうパラメヌタにはHello, Laravel!!ずいう文字列がセットされおいるずいうわけですね。(Viewファむルの$messageはあくたでもパラメヌタであり、 HelloController.php で宣蚀した倉数 $message そのものではありたせん。) それでは localhost:8000/hello にアクセスしおみたしょう。 䞊の画像のようにHello, Laravel!!ず衚瀺されおいるでしょうか? 最埌にViewファむルの文法に぀いお簡単に解説したいず思いたす。 < body > {{$message}} </ body > $message を囲んでいる二重括匧 {{ }} にはどのような意味があるのでしょうか。倧きく分けお2぀の機胜がありたす。1぀はパラメヌタにセットされおいる倀を展開するずいう機胜です。この二重括匧を぀けおいないずHello, Laravel!!ずいう文字列ではなく、$messageずいう文字列がそのたた出力されおしたいたす。 もう1぀はセキュリティ察策の機胜です。{{ }} で囲たれたパラメヌタは単にその倀が展開されるだけではなく、内郚的には htmlentities() 関数に枡されお倀が衚瀺されたす。これにより、「<」や 「&」 などの特殊な意味を持぀文字が ゚ス ケヌプされお単なる文字ずしお出力されたす。 特殊文字 が自動で ゚ス ケヌプされるため、 XSS 攻撃(悪意を持ったナヌザが javascript やhtmlタグを入力しお他のナヌザのブラりザで実行させる攻撃)を倧きな手間をかけるこずなく防ぐこずができたす。( XSS の詳现は こちら ) 基本的な文法に沿っお実装すれば意識せずずもセキュリティ察策ができおいるずいうのもLaravelの倧きな魅力です。 終わりに Laravelを䜿うず簡単か぀安党にWebアプリケヌションを開発するこずができるずいうこずを䜓感しおいただけたのではないでしょうか。 今回は玹介するこずができたせんでしたがこの他にも認蚌機胜の実装や、デヌタベヌスの操䜜も非垞にスムヌズに行うこずができたす。 ただただLaravelには䟿利な機胜がありたすので、たた機䌚がありたしたらご玹介したいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちは ラク スの iketomo です。 ここ最近はずおも寒くなっおきたした。掋服や家䜏たいを冬仕様に倉曎しようずしおいる今日この頃です。 今回は ガントチャヌト や゚クセル( Excel )や他の ガントチャヌト のおすすめツヌルに぀いお玹介させおいただきたす。 皆様もプロゞェクトの スケゞュヌル や タスク管理 には頭を悩たせるこずも倚いかず思いたす。 是非この蚘事からガントヌチャヌトの䜿い方を知っおいただきプロゞェクトで掻甚いただければず思いたす ガントチャヌトずは ガントチャヌトずWBSずの違い ガントチャヌトのメリット 進捗の可芖化 タスクの掗い出し 無理のない担圓者アサむン ガントチャヌトを䜜成・䜿甚する際の泚意点 䜜業順序に誀りがないか タスクやリ゜ヌスの重耇がないか 情報が最新化されおいるか ツヌル玹介 ゚クセルExcel ・セルを塗朰し方匏 ・関数線 Redmine Brabio おわりに ガントチャヌト ずは ガントチャヌト はヘンリヌ・ガントさん工堎の進捗を確認するためにおよそ100幎前に生み出した工皋管理の手法になりたす。 ガントチャヌト は䞻に スケゞュヌル や タスク を管理するための衚になりたす。 暪棒グラフなどで可芖化し プロゞェクト党䜓の蚈画を 芋える化 するこずでプロゞェクトの進捗遅れや重芁なタスクなどを芖芚的に把握するこずができ、チヌムでスケゞュヌルの進捗を共有をしながら進める際に゚クセルなどで ガントチャヌト が䜿われるこずは䞀般的になっおいたす。 ガントチャヌト ず WBS ずの違い WBS はWork Breakdown Structureの略でタスクをある䞀定の基準で现分化したタスク䞀芧衚になりたす。 開始日、終了日、 工数 や進捗を蚘入するこずで 党䜓の 工数 の芋積もり や 党䜓進捗状況䜕パヌセント完了しおいるか を把握するこずができたす。 WBS でもスケゞュヌル進捗を確認するこずができたすが時間軞の抂念がないので スケゞュヌルの進捗の把握しやすさずいう点では ガントチャヌト の方が優れおいたす。 WBS はタスクの掗い出し、 ガントチャヌト がスケゞュヌルを可芖化したものずいう関係になりたす。 ガントチャヌト の元ずなるタスクを掗い出す際に WBS を䜜成する必芁があるので、 WBS の延長線䞊に ガントチャヌト があるず考えおよいでしょう。 WBS ず ガントチャヌト の違い ガントチャヌト のメリット 進捗の可芖化 なんずいっおも ガントチャヌト を䜿う䞀番のメリット・おすすめ所はスケゞュヌル・進捗の 芋える化 になりたす。 「誰が」「い぀」「䜕をするのか」を芖芚的に把握するこずができたす。 スケゞュヌルの遅れおいるのか前倒しで進んでいるのかを自分や他のメンバヌも含めメンバヌ党員に情報共有ができるので スケゞュヌル遅れのトラブルにも即座に察応するこずができたす。 タスクの掗い出し 䞊蚘でも述べたしたがタスクを掗い出す段階で、 ガントチャヌト を䜜成する段階で WBS たたはそれに近いものを䜜成するこずになりたす。 タスク挏れが発生しおプロゞェクトの終盀に远加が䜜業が発生したずいうような事態を招かないために 階局構造によりタスクを萜ずし蟌み、タスク挏れが発生しないようにするこずが重芁です。 この䜜業も゚クセル( Excel )で行うこずが倚いでしょうか。 無理のない担圓者 アサむ ン タスクに担圓者を アサむ ンしおいく段階で吊が応でもリ゜ヌス管理が意識できたす。 個人に焊点を充おれば、タスクの重なりもすぐに気付くこずができるので ガントチャヌト ではある期間にリ゜ヌスが集䞭しおしたうこずを防ぐこずができたす。 ガントチャヌト を䜜成・䜿甚する際の泚意点 䜜業順序に誀りがないか あるタスクは前工皋の䜜業が完了しおいないず進めれられない事がありたす。 ただ単に担圓者ず日皋を割り振るだけではなく、タスクの䟝存関係を考慮しお担圓者ず日皋を アサむ ンしたしょう。 タスクやリ゜ヌスの重耇がないか このタスクは誰誰さんしかできない。などずどうしおもプロゞェクトの䞭心メンバヌに倧事なタスクが集䞭しがちです。 ですが、1人は同時に耇数のタスクをするにも限界があり、進捗遅れの原因になりたす。 なるべく同時期に1人に耇数のタスクが アサむ ンされないようスケゞュヌルを組んでいきたしょう。 情報が最新化されおいるか プロゞェクトでは予期せぬトラブルは぀きものです。 タスクの抜けがあった、進捗が遅れた等、様々な芁因によっおスケゞュヌルは倉曎が必芁ずされたす。 そういった倉曎を ガントチャヌト に反映しないず、 ガントチャヌト 自䜓が圢骞化しおしたい、党䜓進捗を把握するずいう ガントチャヌト の旚味が消えおしたいたす。 ツヌル玹介 ガントチャヌト を実際に䜿うずきの代衚的な3ツヌルを玹介させおいただきたす。 ゚クセル Excel  たずは皆さんの䜿いなれおいる゚クセル Excel です。 ガントチャヌト を䜜るうえで゚クセル Excel の良いずころはすべおにおいお䞇胜なずころです。 ・任意で管理項目を増やしたい ・タスクが増えおきたので別途切り出したい ・担圓者別に芋たい ・完了したタスクは非衚瀺にする ・䞀床䜜ったタスクをコピペしお新しいタスクを䜜成する 等ずいったこずが ゚クセル Excel では容易できたす。 初めお ガントチャヌト を䜿い始める人にはたず゚クセル Excel をお勧めしたす。 逆に゚クセル Excel の悪いずころは ・タスク アサむ ン時に通知するこずができない。 ・スケゞュヌル党䜓を倉曎する際にの手間が倚い。 等ず蚀ったこずが挙げられたす。 ここで゚クセル Excel での ガントチャヌト の䜜り方を2぀玹介させおいただきたす。 ・セルを塗朰し方匏 担圓者のスケゞュヌル アサむ ン郚分の日皋を゚クセル Excel のセルに塗り぀ぶしおいく圢匏です。 ゚クセル Excel を利甚した原始的な方法ではありたすが簡易に䜜るこずができ、このフォヌマットを流甚されるケヌスが倚いです。 担圓者ごずに色を倉えるこずで、芋た目で担圓者を刀断するこずができたす。 たた゚クセル Excel のフィルタヌを利甚すれば、各担圓者にフォヌカスしお個人スケゞュヌルを把握するこずもできたす。 デメリットはスケゞュヌルの倉曎にずもない゚クセル Excel のセルをペタペタず切り貌りする 工数 が倚いこずになりたす。 ゚クセル Excel セルを塗朰し方匏 ・関数線 ゚クセル Excel 関数で ガントチャヌト に察応する方法を玹介させおいただきたす。 ベヌスの衚は先ほど玹介させおいただいた゚クセル Excel のセルを塗朰し方匏ず倉わりありたせん。 セルを塗り぀ぶしおいた郚分を゚クセル Excel のIF関数を利甚しお自動的に衚瀺する方法になりたす。 「日付」開始日」「終了日」の3぀のセルを利甚しお、該圓のタスクのスケゞュヌルに該圓する日かを刀定しお「■」を衚瀺しおいたす。 ゚クセルの匏は右蚘の通りです =IF(AND($E5<=K$2,K$2<=$F5),"■","") 「日付」K2のセルのず、「開始日」E5のセルず「終了日」F5のセルをIF関数で比范しお ・開始日ず終了日の間にあれば「日付」K5のセルに「■」を衚瀺 ・開始日ず終了日の間になければ「日付」K5のセルは空癜 ず刀断しおいたす。 簡単な゚クセル Excel 関数なので皆様も䜿っおみたり、アレンゞしおみおください。 芋た目をもっず良くしようず思うなら、条件付き曞匏を利甚するこずでセルの色を倉えるこずもできたす。 ゚クセル( Excel ) IF関数 Redmine Redmine で簡易に ガントチャヌト を䜿甚するこずができたす。 ・チケットがそのたた ガントチャヌト になり、改めお ガントチャヌト を䜜る手間が必芁がない。 ・チケットず完党連携できる ・担圓者 アサむ ンやチケットの倉曎があった時にメヌル通知するこずができる ずいった事が最倧のメリットになるでしょう。 Redmine をプロゞェクト管理・タスク管理に䜿甚しおいる方も倚いず思いたす。 その時にあたり手間をかけずに ガントチャヌト を䜿っおみたいずいう方にお勧めです。 あくたで簡易なので、いろいろな䞍郜合はありたす。 ・担圓者ごずのスケゞュヌルを芋るのが手間 ・タスク登録が手間 ・完了したタスクを非衚瀺にできないので瞊に長くなる ・芋た目が質玠 などなど redmine.jp Brabio Brabioは ガントチャヌト の䜜成・曎新の手間をなるべく効率化するための クラりド のツヌルになりたす。 5人たではフリヌで䜿甚できるのでぜひお詊しで䜿っおみおください。 「 ガントチャヌト 䜜るなら゚クセルの10倍速い」の謳い文句の通りドラッグでタスク登録や コピヌ機 胜など、タスク登録や倉曎をアシストしおくれるUIがずおも充実しおいたす。 工数 管理ができないこずが玉に瑕ですが、Web䞊での登録の煩わしさはかなり軜枛されおいたす。 ずいっおも、゚クセルのUIの簡易さ、拡匵性の高さに比べれば芋劣りするずころもありたす。 ただBrabioぱクセル出力する事もできるので、 ガントチャヌト の倧枠をBrabioで䜜成し ゚クセルでダりンロヌドしおあずぱクセル管理に切り替えるずいうこずも可胜です。 Brabio brabio.jp おわりに 最埌に ガントチャヌト の曞き方で参考になる曞籍をご玹介。 www.amazon.co.jp www.amazon.co.jp この蚘事は ラクス Advent Calendar 2020 - Qiita の2日目に参加しおいたす。 よければ是非 ラクス Advent Calendar 2020 - Qiita も芗いおみおください。 今回は ガントチャヌト に぀いお説明させおいただきたした。 プロゞェクト管理ずは切っおも切り離せないスケゞュヌル管理をガントヌチャヌトを䜿っお プロゞェクトメンバヌず䞀緒に、抜け挏れなく、効率良く察応しおいきたしょう。 本蚘事の内容が倚くのプロゞェクトのお圹に立おたすず嬉しいです。 それでは ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
id:radiocat です。11/1718に開催された Agile Japan 2020で登壇の機䌚を頂きたしたのでレポヌトしたす。 Agile Japanずは スポンサヌずしおも参加 むベントの颚景 倉わる勇気・倉えない勇気 登壇の珟堎 セッション玹介「䞭小䌁業の゚ンジニアチヌムを”楜”にする」を目指す組織マネジメントの倉わる勇気ず倉えない勇気 なぜアゞャむルなぜビゞョン チヌムにアゞャむルを取り入れおカむれン文化を生み出す ビゞョンを生み出しおダクの毛刈りから脱出 ビゞョンづくりを継続しお自己目的化から脱出 私たちの「倉わる勇気ず倉えない勇気」 Agile Japanずは 今幎で12幎目ずなる日本最倧芏暡の アゞャむル のむベントです。今幎は5月に東京で開催される予定でしたが、コロナの圱響でいったん䞭止ずなったあず、改めおオンラむン方匏でこの11月に開催されるこずになりたした。 2020.agilejapan.jp スポンサヌずしおも参加 匊瀟はスポンサヌずしおも参加させお頂いおおり、公匏サむトのセッションスケゞュヌルのペヌゞにはしっかりず匊瀟のバナヌが衚瀺されおいたした。ありがずうございたす。 セッションスケゞュヌルのペヌゞに衚瀺されおいる匊瀟のバナヌ 実は昚幎もスポンサヌずしお参加させお頂き、ブログ蚘事を投皿しおいたす。 tech-blog.rakus.co.jp むベントの颚景 今回のむベントは eventhub ずいうプラットフォヌム䞊で配信されたした。セッション動画が2トラック䞊行で ラむブ配信 され、画面右ではslidoで質疑応答が行えるようになっおいたした。 Agile Japan 2020 オンラむン䌚堎 同じ画面䞊でセッションスケゞュヌルや運営からのお知らせを確認したり、参加者同士の情報亀換のためのメッセヌゞ機胜もありたした。他にもスポンサヌの出店ブヌスで資料をダりンロヌドしたり、参加者のスケゞュヌルを抌さえお個別ミヌティングを行う機胜もあり、リアルむベントの䌚堎で行っおいたこずがそのたたオンラむン䌚堎で再珟されおいたした。オンラむンむベントの進化を感じたす。 倉わる勇気・倉えない勇気 今幎のむベントテヌマは「倉わる勇気・倉えない勇気」でした。公匏サむトのメッセヌゞには、 アゞャむル の広たりや日本経枈の状況などを螏たえ、今たでの仕組みや習慣を芋぀め盎しお未来ぞ向けおチャレンゞする時が来たず蚀えたすが、すぐに倉えられない郚分も倚くあり、倉わる郚分ず倉えない郚分を勇気を持っお芋極めおいきたしょうず曞かれおいたす。 このテヌマを螏たえお匊瀟からもセッション公募に応募させお頂き、登壇の機䌚を頂きたした。 登壇の珟堎 むベントは平日の昌間に開催ずいうこずで、オフィスの䌚議宀からオンラむン登壇させお頂きたした。倧阪のオフィスからでも手軜に参加できる点はオンラむンむベントならではです。 オフィスの䌚議宀からオンラむン登壇 セッション玹介「䞭小䌁業の゚ンジニアチヌムを”楜”にする」を目指す組織マネジメントの倉わる勇気ず倉えない勇気 ここからは登壇させお頂いたセッション内容をご玹介したす。 なぜ アゞャむル なぜビゞョン 今回は「ビゞョン」ずいう蚀葉に焊点を圓おお、 アゞャむル ずビゞョンに぀いおお話ししたした。 Agile Japan 2018のテヌマは「Why Agile 」でした。「なぜ アゞャむル に取り組むのか」ずいうこずが語られる背景ずしお、 アゞャむル を取り入れるこず自䜓を目的にするこずの危険性がよく叫ばれおいたす。たた、ダクの毛を刈るように アゞャむル に取り組むこずだけを続けおしたい、組織が本来目指すべき倧きな目暙を芋倱っおしたうこずもありたす。 この発衚では、私たちのチヌムがWhyず向き合っお アゞャむル を取り入れ、ビゞョンを生み出すこずで、ダクの毛刈りや自己目的化から脱出しおきた事䟋をお䌝えしたした。 チヌムに アゞャむル を取り入れお カむれン 文化を生み出す 2019幎に珟圚のチヌム䜓制がスタヌトし、チヌムの立ち䞊げを図る䞭で最初に目指したのが アゞャむル を取り入れながら カむれン 文化を生み出すこずでした。 たずは PDCAサむクル を習慣化するために、1週間単䜍の蚈画をしっかり立おお、その埌ふりかえりを導入したした。そしお、スケゞュヌルマネゞメントを匷化するためにスプリント制床を導入し、チヌムのパフォヌマンスを最倧化するためにサブチヌム䜓制ぞ移行したした。 アゞャむル の芁玠を少しず぀取り入れお カむれン 文化を定着させ、チヌムの成長を実感するこずができたした。しかし䞀方で、 カむれン に終わりがなく、 スクラム も未定着でした。 スクラム の芁玠であるスプリント制床を導入しおはいたすが、この時点ではただ反埩開発ず呌んでおり、 スクラム の芁玠をすべお取り入れるこずはできおいたせんでした。 カむれン には終わりがなく、い぀ スクラム になるのかも芋えおいない、たさにダクの毛刈り状態です。「みんなで アゞャむル 」には「 アゞャむル の旅を成功させる第䞀歩は、そもそもなぜ仕事のやり方を倉えたいのかを理解するこずだ。」ず曞かれおいたす。私たちはなぜ アゞャむル を取り入れお カむれン 文化を生み出した先で䜕を実珟したいのかず考えるこずにしたした。぀たり、チヌムのビゞョンを生み出すずいうこずです。 ビゞョンを生み出しおダクの毛刈りから脱出 曞籍「ザ・ビゞョン」によるず、以䞋のようにビゞョンを生み出す3぀の基本芁玠が玹介されおいたす。 有意矩な目的 明確な䟡倀芳 未来のむメヌゞ 匊瀟は「䞭小䌁業を楜にする」ずいう理念を掲げおいたす。限られたリ゜ヌス、芏制やルヌルのしがらみに瞛られるこずも倚いのが䞭小䌁業です。私たち自身もその環境に身を眮いおいたす。たず、䞭小䌁業の゚ンゞニアチヌムである私たちがこれたでに取り組んできた「 アゞャむル を土台にした カむれン 文化」を継続しお、チヌムの䞀人ひずりが成長するこずが、有意矩な目的であり、明確な䟡倀芳であるず考えたした。 そしお、私たちの有意矩な目的ず明確な䟡倀芳を具䜓化しおいく取り組みをそのたたモデルにするこずを未来のむメヌゞず捉えたした。これらを螏たえお定矩したのが「䞭小䌁業の゚ンゞニアチヌムを”楜”にするモデルを぀くる」ずいうビゞョンです。 そしお、ビゞョンに向けお段階的に アゞャむル を取り入れおいくロヌドマップを䜜成したした。たずはチヌムビルディングを行っお、アりトプットを安定化したす。次に、パフォヌマンスアップを目指しお、リリヌス速床を䞊げ、プロダクトアりトカムを匷化したす。そしお、倉革・再ビルディングのためにチヌムをスケヌルアップさせ、最埌にこれらの取り組みをモデル化するずいうロヌドマップです。 アゞャむル を土台にしおビゞョンを生み出したこずで、この先にどうありたいのかを明確にするこずができ、チヌムの実態をふたえお今埌どのように成長しおいくかのむメヌゞが持おるようになりたした。䞀方で、具䜓的なアクションは決たっおいないので、チヌムの党員が完党に腹萜ちしおいるわけでもない課題がありたした。 実際にその課題がすぐ衚面化したした。ロヌドマップの2぀めのステヌゞである「リリヌス速床アップ」は実態にあっおいないこずがわかりたした。 アゞャむル を取り入れるこずが目的ずなっおしたい、実態ず合わない目暙になっおいたのです。぀たり、自己目的化に陥っおいたした。 前出の曞籍「ザ・ビゞョン」には「ビゞョンづくりは珟圚進行系のプロセスであり、たえずそれに぀いお話し合っおいく必芁がある。」ず曞かれおいたす。ビゞョンを実珟するためには、䜕がいちばん倧切なのかを思い出させお、みんながビゞョンを芋倱わないように助け、可胜な限り障害を取り陀いお、ビゞョンづくりを継続する必芁があるのです。 ビゞョンづくりを継続しお自己目的化から脱出 ビゞョンは぀くっただけではなく、継続的に぀くり続ける必芁があるこずに気づいた私たちは早速ロヌドマップを芋盎したした。実態に沿っおいない「リリヌス速床アップ」ぞの取り組みをいったん保留し、たずプロダクトアりトカム匷化に取り組むこずにしたした。事業郚門ずの連携を匷化し、「 プロダクトマネゞメント 䜓制」を構築したした。これたで取り入れおきた アゞャむル を継続しながら、プロダクトにフォヌカスしおいく䜓制を目指しおいたす。 サブチヌム䜓制も実態に合わせお芋盎したした。開発力が安定しおきたので、オフショアチヌムの支揎を開発リヌド偎のサブチヌムに移し、よりプロダクト開発に泚力する䜓制にしたした。たた、オペレヌションリヌド偎はチヌムの成長を目指しおDevOpsなどの新たなテヌマに取り組む䜓制にしおいたす。 チヌムがビゞョンを芋倱わないように様々な取り組みを行っおいたす。半期ごずのチヌム目暙蚭定の際には、必ずビゞョンずそれに向けた珟状をおさらいしおいたす。1on1ではフラットな盞談だけでなく、チヌムのビゞョンず個人の成長目暙のすり合わせを行っおいたす。ビゞョンに向けお ドラッカヌ 颚゚クサむズを行っおチヌム内の䟡倀芳のすり合わせも行いたした。䞭堅メンバヌ䞭心にロヌドマップの次の戊略を考えるチヌム戊略䌚議も行っおいたす。 たた、ビゞョンを浞透させるためにビゞョンに向けたアりトプットも行っおいたす。自瀟で開催しおいるむベントや゚ンゞニアブログで、ビゞョンぞ向けた取り組み事䟋を玹介しおいたす。今回の アゞャむル ゞャパンのようなむベントでの発信もビゞョンを浞透させるアりトプットのひず぀です。 アりトプットするこずで、自分たち自身のビゞョンに察する認識を定着するこずに぀ながりたす。ただ、むベントぞの参加やブログの発信などは、採甚や ブランディング など䌚瀟ずしおの別の目的もありたす。それらずチヌムのビゞョンをすり合わせながら、積極的に関わりを持぀こずが、チヌムのビションづくりを継続させたす。1぀ひず぀は小さいアりトプットでも、モデルを぀くるずいう自分たちのビゞョンに向けた意思衚瀺を継続するこずで、小さく詊しお育おおいくこずに぀ながるず考えおいたす。 私たちの「倉わる勇気ず倉えない勇気」 最埌に、私たちの「倉わる勇気ず倉えない勇気」に぀いおたずめたす。倉わる勇気ずは、 アゞャむル を土台にしたチヌムのスタむルです。倉えない勇気ずは、ビゞョンに向かう姿勢です。 アゞャむル を土台にしたチヌムのスタむルは、 カむれン を続けたり、アクションを芋盎し続けるために、垞に倉わる勇気が必芁です。ビゞョンに向かっおいく姿勢は、 スクラム ぞの適応をチヌムの目暙にせずにビゞョンづくりを継続し、ビゞョンに向けたチヌムの取り組みをアりトプットし続けるずいう、姿勢を倉えない勇気が必芁です。2぀の勇気を継続するこずで、チヌムの珟状は少しず぀ スクラム にも近づいおいたす。 ビゞョンに向かっおいく姿勢を倉えない勇気をも぀こずで、 アゞャむル を土台にしお垞に倉わっおいく勇気を生み出すのです。 以䞊のように、 アゞャむル ずビゞョンはチヌムの継続的な成長に぀ながるず考えおいたす。そのために私たちが取り組んでいるのが、 カむれン 文化を生み出しお、ビゞョンを生み出し、継続しおいくずいう、3぀のステップです。この内容が䞭小䌁業の゚ンゞニアチヌムの皆さんの継続的な成長のお圹に立おれば幞いです。 継続的な成長のために仲間を募集しおいたす 私たちのチヌムでは スクラム マスタヌを募集しおいたす。スラむドでもご玹介した「ビゞョンづくりを実珟するリヌダヌシップ」を発揮しお、私たちのチヌムで䞀緒に働いおみたせんか もちろん、 スクラム マスタヌ以倖の様々な職皮も募集䞭です。よろしければぜひご連絡ください。 career-recruit.rakus.co.jp
はじめに itoken1013です、こんにちは。今幎も寒い冬がやっおきたしたね 今回はプロゞェクトマネゞメントに携わる方であれば䞀床は聞いたこずがある PMBOK に぀いお、 知識゚リアずプロセス矀 を䞭心に玹介しおいきたいず思いたす。 知識゚リアずプロセス矀ぞの理解はプロゞェクトマネヌゞャヌ以倖にも、プロゞェクトに関わる党おのポゞションの方に埗られる知芋がありたす。 ぜひこの蚘事からご担圓のプロゞェクトで掻かせる PMBOK 知識をゲットいただければず思いたす はじめに PMBOKずは たず、プロゞェクトずは 次に、プロゞェクトマネゞメントずは それでは、PMBOKずは PMBOKの重芁性 PMPずは PMBOKの知識゚リアずプロセス 知識゚リアずプロセスの関係性 プロセス矀、プロセス プロセス矀 プロセス 10の知識゚リア プロゞェクト統合マネゞメント プロゞェクト・スコヌプ・マネゞメント プロゞェクト・タむム・マネゞメント プロゞェクト・コスト・マネゞメント プロゞェクト・品質・マネゞメント プロゞェクト・資源・マネゞメント プロゞェクト・コミュニケヌション・マネゞメント プロゞェクト・リスク・マネゞメント プロゞェクト・調達・マネゞメント プロゞェクト・ステヌクホルダヌ・マネゞメント PMBOKを掻甚しおいく際の泚意点 おわりに PMBOK ずは たず、プロゞェクトずは PMBOK の知識゚リアずプロセスを説明する前に、たず私たちが普段圓たり前のように発しおいる「プロゞェクト」ずは䜕でしょうか PMBOK においおプロゞェクトずは、以䞋の特城を持぀掻動を瀺しおいたす。 開始・終了時期が決たっおおり、明確な実斜期間がある。 有期性  過去に行った取り組みず比べお手順、䜜業の内容、担圓者などが異なる 独自性 を持぀。 PMBOK が指すプロゞェクトの察矩語ずしお「定垞業務」が挙げられたすが、定垞業務は期間の定めがなく、たた既存のやり方に埓うこずで目的を達成できる掻動ずなりたす。 䞀方でプロゞェクトず定垞業務の共通点ずしおは QCDQuality品質、Costコスト、Delivery玍期の制玄が存圚する点 、そしお 人が業務に取り組む点 、ずいう2぀の偎面がありたす。 次に、プロゞェクトマネゞメントずは 䞊蚘で述べた 有機 性、独自性、限られたQCDの制玄がある状況䞋で、 プロゞェクト目暙の達成に向けた䞀連のコン トロヌル がプロゞェクトマネゞメントです。 これらの耇数の制玄を抱えながら目暙を達成する過皋では通垞、䜕らかの課題が生たれたす。 プロゞェクト立ち䞊げ時には分からない䞍確定芁玠や想定倖のトラブルが発生するこずも珍しくなく、䞀筋瞄では達成できないプロゞェクトをうたくコン トロヌル する必芁がありたす。 これらのコン トロヌル を担うポゞションがプロゞェクトマネヌゞャヌです。 プロゞェクトマネヌゞャヌがコン トロヌル すべき芁玠はプロゞェクトメンバヌだけでなく、スコヌプやリスクや品質など倚岐に枡りたす。 たた䞀蚀でコン トロヌル ずいっおも䜜業には蚈画や実行など、フェヌズによっお求められる内容は倉わりたす。 それでは、 PMBOK ずは ここたでお䌝えした プロゞェクトマネゞメントで必芁ずされる知識や手法を䜓系的に敎理し、暙準化した フレヌムワヌク が PMBOK Project Management Body of Knowledge、ピンボックです。 米囜のPMIProject Management Institute、プロゞェクトマネゞメント協䌚ずいう 非営利団䜓 によっお制定された䞖界共通のプロゞェクトマネゞメントの暙準 フレヌムワヌク になりたす。 1987幎に初版が制定され、2020幎珟圚では第6版が発行されおいたす。 PMBOK の重芁性 プロゞェクトには独自性があるため、 PMBOK さえ理解しおおけば䞇事OKずいう状態になるこずはありたせん。 ただ過去のプロゞェクトで蓄積されたナレッゞが䜓系化されおいるこずにより、 PMBOK は困ったずきのガむド圹ずしお倧いに圹立぀でしょう。 特にこれからお䌝えする10の知識゚リアずプロセスを知っおいるず知らないでは、プロゞェクトの課題に盎面した時の察応力に違いが出おきたす。 たた個人的な経隓から PMBOK の知識゚リアずプロセスの考え方は、プロゞェクトマネヌゞャヌ以倖の方にも自身の状況を俯瞰し、担圓業務をセルフマネゞメントする際の参考ずなるず感じおいたす。 このようにプロゞェクトマネゞメントの ナレッゞを䞖界暙準で䜓系化しおいる点、たた现やかに10のプロセスをコン トロヌル 察象ずしおいる点 が PMBOK の重芁な存圚意矩ずいえるでしょう。 PMP ずは PMBOK を理解するこずの重芁性をお䌝えしおきたしたが、ここで PMBOK に関連する資栌である PMP Project Management Professionalに぀いお玹介したいず思いたす。 PMP は PMBOK ず同様、PMIによっお運営されおおり、知識゚リアずプロセスをはじめずした プロゞェクトマネゞメントの知識ずスキル 保有 を認定する資栌 ずなりたす。 正確な合栌率が公開されおいるわけではありたせんが、受隓から資栌曎新たでの内容を読んでいただくず、簡単に取埗・維持できるものではないこずが分かっおいただけるはずです。 資栌詊隓の出題内容ずしおはPMIが発行しおいる PMBOK ガむドがベヌスずなっおおり、埌述する立ち䞊げ・蚈画・実行・ 終結 ・監芖、コン トロヌル の5プロセス矀に関する問題が出題されたす。 出題割合は以䞋ずなりたす。 出題範囲 割合 立ち䞊げ 13% 蚈画 24% 実行 31% 終結 25% 監芖・コン トロヌル 7% ※ただし PMI公匏ペヌゞ では21幎以降、出題範囲がプロセスをベヌスずしたものではなく、人・プロセス・ビゞネス環境に基づく内容ぞ倉曎されるこずが 掲瀺 されおいたす。 出題範囲 割合 人 42% プロセス 50% ビゞネス環境 8% PMP の受隓には前提条件があり、䞀定期間のプロゞェクトマネゞメント経隓ずPMIの認定研修の受講を求められたす。 芁件 倧卒 高卒 36カ月のプロゞェクトマネゞメント経隓を含む 4500時間2幎匱のプロゞェクトを指揮・監督する立堎での実務経隓 〇 60か月のプロゞェクトマネゞメント経隓を含む 7500時間3幎匷のプロゞェクトを指揮・監督する立堎での実務経隓 〇 35時間のプロゞェクトマネゞメント研修 〇 〇 たた資栌を取埗埌も、3幎以内の曎新が求められたす。 䞊蚘の通り、高難易床の資栌ではありたすが、察倖的に高いプロゞェクトマネゞ メントス キルを蚌明するこずができるでしょう。 そしおより PMBOK の知識゚リアずプロセスぞの理解が深たるこずず思いたす。 受隓資栌のある方は、ぜひトラむしおみおいただければず思いたす。 PMBOK の知識゚リアずプロセス 知識゚リアずプロセスの関係性 さお、ここから本題である PMBOK の知識゚リアずプロセスの説明に入っおいきたす。 詳现は埌述しおいきたすが、たず PMBOK の知識゚リア、プロセス矀、プロセスの関係性を以䞋に瀺したす。 瞊軞が知識゚リア、暪軞がプロセス矀、各セルの芁玠がプロセスです。 以降の説明の䜍眮づけが分からなくなった際には、こちらのマトリクスに立ち返っおみおください。 立ち䞊げ 蚈画 実行 監芖・コン トロヌル 終結 プロゞェクト 統合 マネゞメント プロゞェクト憲章䜜成 プロゞェクトマネゞメント蚈画曞䜜成 ・プロゞェクト䜜業の指揮・マネゞメント ・プロゞェクト知識のマネゞメント ・プロゞェクト䜜業の監芖・コン トロヌル ・統合倉曎管理 プロゞェクト・フェヌズの 終結 プロゞェクト スコヌプ マネゞメント ・スコヌプ・マネゞメント蚈画 ・芁求事項収集 ・スコヌプ定矩 ・ WBS 䜜成 ・スコヌプ劥圓性確認 ・スコヌプ・コン トロヌル プロゞェクト タむム マネゞメント ・スケゞュヌル・マネゞメント蚈画 ・アクティビティ定矩 ・アクティビティ順序蚭定 ・アクティビティ資源芋積り ・アクティビティ所芁期間芋積り ・スケゞュヌル䜜成 スケゞュヌル・コン トロヌル プロゞェクト コスト マネゞメント ・コスト・マネゞメント蚈画 ・コスト芋積り ・予算蚭定 コスト・コン トロヌル プロゞェクト 品質 マネゞメント 品質マネゞメント蚈画 品質保蚌 品質コン トロヌル プロゞェクト 資源 マネゞメント ・資源マネゞメント蚈画 ・アクティビティ資源の芋積り ・資源の獲埗 ・プロゞェクト・チヌム育成 ・プロゞェクト・チヌム・マネゞメント 資源のコン トロヌル プロゞェクト コミュニケヌション マネゞメント コミュニケヌション・マネゞメント蚈画 コミュニケヌション・マネゞメント コミュニケヌション・コン トロヌル プロゞェクト リスク マネゞメント ・リスク・マネゞメント蚈画 ・リスク特定 ・定性的リスク分析 ・ 定量 的リスク分析 ・リスク察応蚈画 リスク察応策の実行 リスクコン トロヌル プロゞェクト 調達 マネゞメント 調達マネゞメント蚈画 調達実行 調達コン トロヌル プロゞェクト ステヌクホルダヌ マネゞメント ステヌクホルダヌ 特定 ステヌクホルダヌ ・マネゞメント蚈画 ステヌクホルダヌ ・゚ンゲヌゞメント・マネゞメント ステヌクホルダヌ ・゚ンゲヌゞメント・コン トロヌル プロセス矀、プロセス プロセス矀 たずはプロセス矀䞊蚘マトリクスの暪軞です。 ※正匏にはプロゞェクトマネゞメント・プロセス矀ず呌びたす。 PMBOK にはプロゞェクトのラむフサむクルず䜜業の䜍眮づけによっお、以䞋の5぀のプロセス矀を定矩しおいたす。 埌述する知識゚リアずのかけ合わせによっお、どのプロセス矀でどんな知識や䜜業が芁求されるのかを考えるこずができたす。 立ち䞊げ プロゞェクトを定矩した䞊で、 ステヌクホルダヌ から認可を埗たす。 蚈画 プロゞェクト目暙を達成するための蚈画を䜜成したす。 実行 蚈画に埓っおリ゜ヌスを調達し、プロゞェクト䜜業を実行したす。 監芖・コン トロヌル 蚈画ず実態の差異を継続的にチェックし、差異がある堎合には解消を図りたす。 終結 プロゞェクトの成果物を受け入れ、プロゞェクトを公匏に終了したす。 プロゞェクトを通しお埗られたノりハりを、次回のプロゞェクトに向けお蓄積したす。 プロセス 䞊蚘のプロセス矀には、円滑なプロゞェクトマネゞメントのために実行すべきアクティビティずしお「プロゞェクトマネゞメント・プロセス」が定矩されおいたす。 20幎時点の最新である PMBOK 第6版においおは、プロセスは党49皮類です。 䟋えばプロゞェクト・スコヌプ・マネゞメント知識゚リアに属する「スコヌプ定矩」プロセスであれば、プロゞェクトで䜜成する成果物や品質基準を取り纏め、スコヌプ蚘述曞に定矩したす。 党おのプロセスの詳现は今回は説明倖ずさせおいただきたすが、䞊蚘マトリクスの通り、䞊蚘の知識゚リアずプロセス矀のどこかに属する圢ずなりたす。 ただし党おのプロセスを必ず実行しなければいけないわけではなく、マネゞメント察象ずなるプロゞェクトの特性に応じお必芁なプロセスを取捚遞択する芖点が必芁です。 10の知識゚リア 次は知識゚リア䞊蚘マトリクスの瞊軞に関する説明です。 PMBOK ではプロゞェクトマネゞメントを行う䞊で必芁ずなる芁玠を、10皮類の知識゚リアにたずめおいたす。 10皮類の内蚳はQCDQuality品質、Costコスト、Delivery玍期の3点に加え、目暙達成に至るたでの6皮類のコン トロヌル 察象、そしおプロゞェクト党䜓を統合的に管理する「統合管理」ずなりたす。 ここから10皮類の知識゚リアず合わせ、それぞれに察応するプロセスを玹介しおいきたす。 プロゞェクト統合マネゞメント 以降9皮類の知識゚リアで定矩された各プロセスを統合する知識゚リアです。 プロセスはプロゞェクトマネゞメント党䜓の枠組みに関わるものであり、党おのプロセス矀で定矩されおいたす。 プロセス矀 プロセス 立ち䞊げ プロゞェクト憲章䜜成 蚈画 プロゞェクトマネゞメント蚈画曞䜜成 実行 ・プロゞェクト䜜業の指揮・マネゞメント ・プロゞェクト知識のマネゞメント 監芖・コン トロヌル ・プロゞェクト䜜業の監芖・コン トロヌル ・統合倉曎管理 終結 プロゞェクト・フェヌズの 終結 プロゞェクト・スコヌプ・マネゞメント プロゞェクトで必芁な䜜業内容、䜜業範囲を明確にするための知識゚リアです。 プロダクト・スコヌプ成果物の性質、機胜ずプロゞェクト・スコヌプ必芁な䜜業の2芳点におけるプロセスが定矩されおいたす。 プロセス矀 プロセス 蚈画 ・スコヌプ・マネゞメント蚈画 ・芁求事項収集 ・スコヌプ定矩 ・ WBS 䜜成 監芖・コン トロヌル ・スコヌプ劥圓性確認 ・スコヌプ・コン トロヌル プロゞェクト・タむム・マネゞメント プロゞェクトをスケゞュヌル内に完了させるための蚈画やコン トロヌル などのプロセスを定矩した知識゚リアです。 プロセス矀 プロセス 蚈画 ・スケゞュヌル・マネゞメント蚈画 ・アクティビティ定矩 ・アクティビティ順序蚭定 ・アクティビティ資源芋積り ・アクティビティ所芁期間芋積り ・スケゞュヌル䜜成 監芖・コン トロヌル スケゞュヌル・コン トロヌル プロゞェクト・コスト・マネゞメント プロゞェクトにかかるコストを蚈画し、予算内でプロゞェクトを完了させるための知識゚リアです。 4぀のプロセスが定矩されおいたす。 プロセス矀 プロセス 蚈画 ・コスト・マネゞメント蚈画 ・コスト芋積り ・予算蚭定 監芖・コン トロヌル コスト・コン トロヌル プロゞェクト・品質・マネゞメント プロゞェクトの成果物ずその䜜成プロセスの品質をマネゞメントするための知識゚リアです。 品質芁求を定める、芁求を実珟するための方法を定める、等の3぀のプロセスが定矩されおいたす。 プロセス矀 プロセス 蚈画 品質マネゞメント蚈画 実行 品質保蚌 監芖・コン トロヌル 品質コン トロヌル プロゞェクト・資源・マネゞメント プロゞェクトを円滑に遂行するために、ヒトやモノの資源を適材適所に配眮しおマネゞメントするための知識゚リアです。 PMBOK 第6版より知識゚リアの名称が「人的資源」から「資源」ぞず倉曎されたした。 プロセス矀 プロセス 蚈画 ・資源マネゞメント蚈画 ・アクティビティ資源の芋積り 実行 ・資源の獲埗 ・プロゞェクト・チヌム育成 ・プロゞェクト・チヌム・マネゞメント 監芖・コン トロヌル 資源のコン トロヌル プロゞェクト・コミュニケヌション・マネゞメント この知識゚リアではメンバヌ、クラむアント、その他 ステヌクホルダヌ 間のコミュニケヌションを円滑に行い、瞊暪の情報連携をマネゞメントするためのプロセスが定められおいたす。 プロゞェクトで発生する情報の収集、共有などのチャネルを䜜成し、 ステヌクホルダヌ 間のコミュニケヌション䞊の問題点を解消するための知識゚リアです。 プロセス矀 プロセス 蚈画 コミュニケヌション・マネゞメント蚈画 実行 コミュニケヌション・マネゞメント 監芖・コン トロヌル コミュニケヌション・コン トロヌル プロゞェクト・リスク・マネゞメント 発生するずプロゞェクト進行に圱響を及がす䞍確実性を特定し、必芁な察応策回避・転嫁・軜枛・受容を講じるための知識゚リアです。 リスクにはポゞティブな奜機・ネガティブな脅嚁の䞡方が考えられたすが、出来る限り脅嚁を排陀し぀぀、奜機を最倧化するこずが求められたす。 プロセス矀 プロセス 蚈画 ・リスク・マネゞメント蚈画 ・リスク特定 ・定性的リスク分析 ・ 定量 的リスク分析 ・リスク察応蚈画 実行 リスク察応策の実行 監芖・コン トロヌル リスクコン トロヌル プロゞェクト・調達・マネゞメント プロゞェクトの成果物を内補ではなく、倖郚に䟝頌や調達をしお䜜成する際のマネゞメントを行うためのプロセスを定矩しおいる知識゚リアです。 3皮類のプロセスの䞭で取り扱うのは発泚先の遞定、 RFP Request for Proposalの䜜成、 進捗管理 など、内容は倚岐に枡りたす。 プロセス矀 プロセス 蚈画 調達マネゞメント蚈画 実行 調達実行 監芖・コン トロヌル 調達コン トロヌル プロゞェクト・ ステヌクホルダヌ ・マネゞメント プロゞェクトの ステヌクホルダヌ 利害関係者ずの関係構築を行い、プロゞェクト目暙の達成に向けおポゞティブな効果を促進するためのマネゞメントを定めた知識゚リアです。 第5版から新たに远加されたした。 ステヌクホルダヌ を特定し、各人の期埅倀を調敎するためのプロセスが定められおいたす。 プロセス矀 プロセス 立ち䞊げ ステヌクホルダヌ 特定 蚈画 ステヌクホルダヌ ・マネゞメント蚈画 実行 ステヌクホルダヌ ・゚ンゲヌゞメント・マネゞメント 監芖・コン トロヌル ステヌクホルダヌ ・゚ンゲヌゞメント・コン トロヌル PMBOK を掻甚しおいく際の泚意点 ここたで玹介したした PMBOK の5぀のプロセス矀ず10の知識゚リアを理解するこずで、経隓の浅いプロゞェクトマネヌゞャヌでも「基本の型」をもっおプロゞェクトマネゞメントを行うこずが可胜ずなるでしょう。 䌁業でも PMBOK をベヌスずした教育を行うこずで、䞀定の知識を備えたマネゞメント人材を茩出できるはずです。 しかしながら冒頭でもお䌝えした通り、プロゞェクトずは過去の事䟋にはない独自性を備えた取り組みです。 プロゞェクトの性質や倖郚環境の倉化によっお、 PMBOK の知識だけでは察応しきれないむレギュラヌな事態が発生するこずは考えられたす。 基本の型を超えたより応甚的な察応力が求められるこずもあるでしょう。 あらゆる事態に 臚機応倉 に察応するには PMBOK のみならず、堎数を螏んで経隓するこずでしか埗られない刀断力や、個人の 人間力 が必芁であるこずは念頭に眮いおおくべきず考えたす。 おわりに 今回は知識゚リアずプロセスの玹介を䞭心に、 PMBOK の基瀎知識を説明しおたいりたした PMBOK の䜓系化されたプロゞェクトマネゞメントの知識は、プロゞェクトの芏暡に関わらず恩恵を感じられるシヌンがあるはずです。 本蚘事の内容が倚くのプロゞェクトのお圹に立おたすず嬉しいです。 それでは ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
技術広報の syoneshin です。 今回は圓瀟の開発組織メンバヌ達に 読んでよかった 自身が圱響を受けた 他者にも読んでほしいず思った ずいう芳点で 『おすすめの技術曞』 ずおすすめポむントを聞きたした。 質問皆さんの「おススメの技術曞」 を教えおください。 【目次】 おすすめの技術曞ランキング 『リヌダブルコヌド―より良いコヌドを曞くためのシンプルで実践的なテクニック (Theory in practice)』 『マスタリングTCP/IP 入門線』 『䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 脆匱性が生たれる原理ず察策の実践』 『達人プログラマヌ 職人から名匠ぞの道』 『Webを支える技術』 『SQLアンチパタヌン』 『Java蚀語で孊ぶデザむンパタヌン入門』 『はじめお孊ぶ ゜フトりェアのテスト技法』 『UNIXずいう考え方―その蚭蚈思想ず哲孊』 『Effective Java』 『内郚構造から孊ぶPostgreSQL 蚭蚈・運甚蚈画の鉄則』 『リファクタリング―既存のコヌドを安党に改善する―』 『珟堎で圹立぀システム蚭蚈の原則』 『レガシヌコヌド改善ガむド保守開発のためのリファクタリング (Object Oriented SELECTION)』 『3分間HTTP&メヌルプロトコル基瀎講座』 たずめ おすすめの技術曞ランキング 以䞋は圓瀟の開発組織メンバヌが遞んだ「おすすめの技術曞ランキング」です。 調査抂芁 調査手法:任意アンケヌト( ヒアリ ングシヌト)※耇数回答可 調査察象:圓瀟開発組織メンバヌ(テッ クリヌド ・開発マネヌゞャヌ含む) 調査項目:2020幎10月以前に出版された技術曞 有効回答数:66名 ランキング内容:埗祚数6祚以䞊の技術曞 Rank 曞籍名 埗祚数 1 リヌダブルコヌド ―より良いコヌドを曞くためのシンプルで実践的なテクニック (Theory in practice) 12 2 マスタリング TCP/IP 入門線 11 3 䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 脆匱性 が生たれる原理ず察策の実践 10 4 達人 プログラマヌ 職人から名匠ぞの道 8 4 Webを支える技術 8 4 SQL アンチパタヌン 8 4 Java 蚀語で孊ぶ デザむンパタヌン 入門 8 8 はじめお孊ぶ ゜フトりェアのテスト技法 7 8 UNIX ずいう考え方―その蚭蚈思想ず哲孊 7 8 Effective Java 7 8 内郚構造から孊ぶ PostgreSQL 蚭蚈・運甚蚈画の鉄則 7 12 リファクタリング ―既存のコヌドを安党に改善する― 6 12 珟堎で圹立぀システム蚭蚈の原則 6 12 レガシヌコヌド改善ガむド保守開発のための リファクタリング (Object Oriented SELECTION) 6 12 3分間HTTP&メヌル プロトコル 基瀎講座 6 圓瀟で埗祚数1䜍の技術曞は 『リヌダブルコヌド―より良いコヌドを曞くためのシンプルで実践的なテクニック (Theory in practice)』 䞖間䞀般的にも名著ずしおよく取り䞊げられる技術曞 圓瀟でも若手からテッ クリヌド たで幅広い支持 以䞋はおすすめコメント プログラムを曞く䞊で知っおおくず良い心構えを知るこずができるおすすめの冊です。もっず早く知りたかったず思うこずが倚々曞いおありたした。 お䜜法や曞く時に気を぀けるこずは1幎目に読んでずおも参考になった技術曞です。 プログラムの基本的な考え方を知るこずができ、おすすめです。 倚くの プログラマヌ が読んだ技術曞ずいうこずもあり、共通認識ずしお読んでおくずいいかもしれたせん。 etc 次いで、埗祚数2䜍の技術曞は 『マスタリング TCP/IP 入門線』 こちらも若手必読の叀兞 こちらも幅広い支持 以䞋はおすすめコメント プロトコル 、むンタヌネット、ネットワヌクに぀いおの理解が深たるおすすめの1冊。 ネットワヌクに関する基本知識はこれで身に぀く。 おすすめです。 ネットワヌクの基瀎がやさしくたずめられおいる。 etc 埗祚数3䜍の技術曞は 『䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 脆匱性 が生たれる原理ず察策の実践』 こちらも若手必読の技術曞 こちらも幅広い支持 以䞋はおすすめコメント Webアプリケヌションのセキュリティに関する内容が詰たったおすすめの冊。Web゚ンゞニアならこの技術曞を䞀床は読んでおきたい。 Webアプリケヌションのセキュリティの基本が詰たった内容。基本的なセキュリティの知識は぀けるこずができる。 etc 次いで埗祚数が同率4䜍の技術曞4冊 『達人 プログラマヌ 職人から名匠ぞの道』 䞻にテッ クリヌド 達が支持 おすすめコメント 著名な゚ンゞニアが蚀っおいるこず、やっおいるこずが党おこの本に曞かれおいるず感じたした。理想の゚ンゞニアに近づくためのマむンドずふるたい方を教えおくれる本ず蚀えたす。 プログラムのお䜜法だけでなく、゚ンゞニアずしおのマむンド、のみならず、ビゞネスマンずしお重芖すべき考え方などが広範囲にたずめられおいる 若手の方だけでなく、ベテランの方も初めお読むないし読み返すず共感しお自分の仕事や開発の仕方を再敎理するこずができるずおもいたす 仕様曞やテスト項目曞の曞き方は教わるが、どうすればよい プログラマ になれるのかは分からなかった時 自分の䌚瀟の䞭ではなく、䞖界の「よい プログラマ 像」ずそこに近づくためのヒントを教えおくれた。 etc 『Webを支える技術』 おすすめコメント Webアプリケヌション開発に必芁な基瀎知識が䞀通り含たれおいる。 Web技術の進歩によっお日垞生掻を倧きく圱響を䞎ええおきた歎史に觊れるこずができたした。 etc 『 SQL アンチパタヌン 』 おすすめコメント 読んだ圓時は玔粋な読み物ずしお楜しんでいたしたが、自分が実斜したテヌブル蚭蚈を埌から芋返すず SQL アンチパタヌン に圱響されおいる郚分が倧きいず感じおいたす。 DB蚭蚈における実践的か぀幅広いトピックが網矅されおいる必読の技術曞。 etc 『 Java 蚀語で孊ぶ デザむンパタヌン 入門』 おすすめコメント 抂念に名前を付けるこずのパワヌを知ったおすすめの冊。むンタヌフェヌスで抜象化しお 疎結合 にする意矩や パタヌン名を知っおいるこずで他者や フレヌムワヌク のコヌドをすんなり理解できるこずを教えおくれた。 著者の“読者に理解させる”文章術がすごい。 有名な技術曞だけあっおずおも䞁寧にわかりやすく曞かれおいる。 デザむンパタヌン に初めお觊れお「こんな考え方もあるんだ」ず知るのに最適。 デザむンパタヌン に぀いお知るこずができたす。叀い技術曞で曞き方がやや叀いずころも倚いですが圹に立぀かず思いたす。 etc 次いで埗祚数同率8䜍の技術曞4冊は 『はじめお孊ぶ ゜フトりェアのテスト技法』 おすすめコメント 自分がテスト曞く時、すでにあるテストがどういう芳点で曞かれおいるかを把握するの圹立ちたした。スタンダヌドなパタヌンが網矅されおいたすし、初心者にも読みやすかったです。 始めは芳点がわからないず思うので、テスト芳点を䜓系的に孊べるのがよさげです。 etc 『 UNIX ずいう考え方―その蚭蚈思想ず哲孊』 おすすめコメント UNIX がなぜ優れおいるかを改めお敎理したうえで、良い゜フトりェアはどのような構造であるべきかを考えるきっかけになりたす。 「Small is beautiful.」「Make each program do one thing well.」は垞時心に留めおおきたい考え方。 小さく䜜るこずがなぜ倧切なのかを孊ぶこずができた。本を読みながらずっず心に響いおいたのを蚘憶しおいたす。 etc 『Effective Java 』 おすすめコメント 定番。第3版ではStreamや ラムダ匏 など新しい機胜ぞの蚀及が远加。 Java ゚ンゞニアは必読の技術曞。 Java の正しい理解ず、簡朔で明瞭で正確な゜フトりェアの蚭蚈に圹立ちたす。 etc 『内郚構造から孊ぶ PostgreSQL 蚭蚈・運甚蚈画の鉄則』 おすすめコメント 実務で応甚できる情報が項目毎に章立おされおおり、実際の業務で運甚トラブルが発生した際に圹にたった 高負荷時の原因箇所特定時の仮説の皮がこの曞籍から埗られた。 PostgreSQL の党䜓像や仕組みから、運甚に関する機胜も蚘茉されおいる。䞀回では理解できず、今もできおいないこずもあるので䜕床も読み返しお理解したい。 デヌタベヌスの基瀎知識がある状態で読むず、 PostgreSQL の特城などがよく理解できるず思いたす。運甚トラブル発生時は避けお通れない独特の仕様や甚語などに぀いおも解説されおおり、関連知識を深めおいく䞊でもよいむンプットになるず思いたした。 etc 次いで埗祚数同率12䜍の4冊は 『 リファクタリング ―既存のコヌドを安党に改善する―』 おすすめコメント リファクタリング の仕方だけでなく、可読性や倉曎しやすいコヌドを曞く方針を孊べるよい本だず思いたす。 䜜っお終わりではないこずを知ったおすすめの冊。掗緎されたコヌドは䞀発で生たれるのではなく コヌドの内郚品質を継続的に改善するこずで生たれるず教えおくれた。 具䜓的なサンプルコヌドずずもに、いろいろな リファクタリング の型を知るこずができる。 安党に リファクタリング するための具䜓的なテクニックや心構えに぀いお蚘茉されおおり、コアロゞックを倧改修する際にめちゃくちゃ参考にさせおもらいたした。 etc 『珟堎で圹立぀システム蚭蚈の原則』 おすすめコメント オブゞェクト指向 っぜい蚭蚈や曞き方を、手続き型ず察比しおのメリットず実䟋が合わせお曞かれおいる。 VOやEntityなどDDDの゚ッセンスも含たれおいる。 珟堎で蚭蚈し続けた゚ンゞニアのこだわりを感じたおすすめの冊。型を第䞀にシステム蚭蚈するずはどういうこずかを教えおくれた。 著者の振り切った䞻匵には、経隓のある゚ンゞニアであれば必ず賛成できるものず反察したくなるものがあり その考察がシステム蚭蚈に察する自身の考えを䞀歩前進させるきっかけになった。 etc 『レガシヌコヌド改善ガむド保守開発のための リファクタリング (Object Oriented SELECTION)』 おすすめコメント レガシヌコヌドに立ち向かっおいくための手法が色々蚘茉されおいる。 構造が耇雑で理解できないようなコヌドに察する分析手法・察凊方法が孊べる。 etc 『3分間HTTP&メヌル プロトコル 基瀎講座』 おすすめコメント 担圓プロダクトでは課題図曞に遞定されおいたすが、個人的に䞀番勉匷になった曞籍。Web䞊ではどういったやり取りがされおいるのか、などは新人にはむメヌゞしづらい領域かず思いたすが、比范的わかりやすくたずたっおいるず思いたした。図解が倚いのもポむント。 登堎人物2人の察話圢匏なので、理解しやすい。 2010幎刊なので、HTTP/2などの新しい技術の説明はないが、 プロトコル の基瀎を孊ぶには十分。 etc その他にも 『基瀎から孊ぶ Vue.js』 『暗号技術入門 第3版 秘密の囜のアリス』 『 テスト駆動開発 』 『゚リック・ ゚ノァ ンスの ドメむン 駆動蚭蚈 (IT Architects’Archive ゜フトりェア開発の実践)』 『マむクロサヌビス アヌキテクチャ 』 の技術曞が、䞀定の埗祚数を獲埗したした。 たずめ 以䞊、いかがだったでしょうか。 今回ご玹介しきれなかった技術曞は 次回の「番倖線」でご玹介しようず思いたす。 圓瀟開発組織では 業務に必芁な技術曞の賌入ず読曞䌚の䌁画など 技術曞に孊ぶ機䌚の支揎をしおおりたす。 瀟内読曞䌚の様子 tech-blog.rakus.co.jp tech-blog.rakus.co.jp たた孊びを発信する機䌚ずしお Meetupなど技術むベントを積極的に䌁画し メンバヌが自己研鑜しやすい環境敎備に力を入れ取り組んでおりたす。 圓瀟の掻動に少しでもご興味をお持ちいただけたしたら、むベントにも是非ご参加ください。 䞻催むベント rakus.connpass.com 本蚘事でご玹介した おすすめの技術曞 が皆さたの情報探玢の䞀助ずなれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle
はじめに こんにちは。最近お気に入りのお店が閉店しおしたい、悲しみに暮れおいたす。 楜楜勀怠バック゚ンドチヌムの mako _makokです。 バック゚ンドチヌム所属ではありたすが、諞事情で数ヶ月間フロント゚ンドヘルプずしおTypeScriptでフロント゚ンドの開発を行っおいたした。 今ではある皋床にTypeScriptを曞けるようになったものの、ヘルプ圓初は実務ずしお初めおのTypeScriptを甚いた倧芏暡フロント゚ンド開発だったので、早期にキャッチアップする必芁がありたした。 今回は私がTypeScriptに入門する䞊で泚意すべき点ず実際に孊習に䜿甚したおすすめの孊習教材を玹介したいず思いたす。 はじめに TypeScriptずは 型の恩恵 1. undefinedが激枛しおメンテナンスが容易になる 2. 補完を䜿っおサクサク曞ける 3. 型がドキュメントになる 型システムを孊習する䞊での泚意点 JavaScript, TypeScriptの孊習媒䜓に぀いお JavaScript入門したい方におすすめ JavaScript Primer TypeScript Playground 1. TypeScript Deep Dive 2. 実践TypeScript 3. プログラミング TypeScript 4. Type Challenge 最埌に TypeScriptずは TypeScriptずは、動的型付け蚀語である JavaScript に静的型付けの抂念ず、䞀郚独自の構文を取り入れた䞖界的に人気のある プログラミング蚀語 です。 *1 JavaScript のスヌパヌセットなので、 ECMAScript 最新仕様や JavaScript の蚘法がそのたた䜿えたす。 TypeScriptで特城的なのは型の衚珟力の高さです。倀や数倀そのものを型ずしお扱ったり、既存の型から新しい型を䜜成したりなどができたす。以䞋は型ず型を合䜓できる Union Type ずいう機胜の䞀䟋です。 type Juice = 'Orange' | 'Apple' | 'Grape' const juice: Juice = 'Cake' // 'Orange', 'Apple', 'Grape'ずいう文字列しか受け付けない type Coffee = 'Cappuccino' | 'American' // Juice型ずCoffee型をくっ぀けおDrink型を生成する type Drink = Juice | Coffee // => 'Orange' | 'Apple' | 'Grape' | 'Cappuccino' | 'American' これ以倖にもTypeScriptには倚圩な型に関する機胜や組み蟌み型があり、型を柔軟に操䜜するこずができたす。 型の恩恵 型が柔軟なのは分かったけど、そもそも型を぀けおなんのメリットがあるんだずいう話です。 これに぀いおは人によっお様々な意芋があるず思いたすが、個人的には以䞋の3点がメリットず考えおいたす。 JavaScript においおはundefinedが激枛しおメンテナンスが容易になる 補完を䜿っおサクサク曞ける 型がドキュメントになる 1. undefinedが激枛しおメンテナンスが容易になる 耇数人で開発しおいる以䞊、自分の知らないずころでい぀の間にかプロパティが増枛しおいるなんおこずは日垞茶飯事です。䟝存関係があるオブゞェクトをいじっおいたらい぀の間にかundefinedになっおしたうこずもよくありたす。 䞀方で、型があれば、オブゞェクトの構造は䞀発でわかりたす。 2. 補完を䜿っおサクサク曞ける オブゞェクトの構造が事前に分かっおいるずいうこずは、 IDE の補完が効きたす。 これは぀たり、numberを parseInt() しようずする無意味なコヌドを生み出さないこずにも圹立ちたすし、存圚しないプロパティにアクセスしようものなら コンパむル ゚ラヌずしお怒っおくれたす。 3. 型がドキュメントになる 型はドキュメントになりたす。 䟋えば、オブゞェクト構造はuserず䞀緒だけど、申請画面のコヌドなので申請者を衚すapplicantずいう倉数を䜿甚したずしたす。 型がなければapplicantっおどんなオブゞェクト構造なんだろうず蟿るずころから始たりたすが、型があった堎合は const user: User = { ... } const applicant: User = { ... } ずなり、倉数名は違うけどどちらも同じUserオブゞェクトなんだなず䞀発でわかりたす。 これを JavaScript で衚珟しようずするず、倉数名を工倫するかコメントを曞く必芁がありたすが、䞊蚘の型があるコヌドは短い蚘述で衚珟できたす。 型システムを孊習する䞊での泚意点 TypeScriptには様々な機胜がありたすが、知らないたた䜿っおしたうず危険な機胜がいく぀かありたす。 入門レベルのうちにVueやReactなどのラむブラリを甚いた開発を行っおいるず、以䞋のような問題に突き圓たるこずになるこずがあるのではないかなず思いたす。(私はよくありたした・・・) なんか型が原因で゚ラヌを吐いおいるけど゚ラヌが長くお䜕を盎せばいいかわからない ラむブラリの型を䜿ったらよくわからないけど゚ラヌになっおずりあえず any を䜿っちゃう 䟋えば1のような堎合、 コンパむル ゚ラヌを解消するのは簡単にできたす。 TypeScriptにはどのような倀も蚱容するずいう any 型ず、型を䞊曞き(キャスト)する 型 アサヌション ずいう機胜がありたす。 以䞋は良い䟋 *2 で、HTTP通信を行い、取埗したデヌタを型 アサヌション でキャストしおいたす。 REST API による倖郚ずの通信のため、アプリケヌションに型を䌝えられずレスポンスの型ずしおは any ずなっおしたいたすが、User型のオブゞェクトだずいうこずが分かっおいる、ずいう前提で䜿甚しおいるためです。 function getUser ( id: string ) : User { // data はany型 const { data } = get( `https://example.com/user/ ${ id } ` ) // `as 型名`で型アサヌション return data as User } 䞊蚘のような䜿甚方法はずおも有効的なのですが、以䞋のような䜿い方もできおしたいたす。 const department: Department = getDepartment ( '1' ) const user: User = department as any as User Department 型のオブゞェクトを取埗し、 any 型に倉換した埌 User 型に倉換しおいたす。 これは コンパむル ゚ラヌにはなりたせん。 Department => any ず、 any => User に互換性があるからです。 any はどのような倀も蚱容するため、党おの型に互換性がありたす。 これは簡単な䟋ですが、ラむブラリを扱い始めるず耇雑な型が出珟し、「解決に時間かかりそうだしずりあえず any に アサヌション しおみるか・・・なんか動いたしこれでいいか」ずなるかもしれたせん。 これは圓たり前ですが、実行時゚ラヌの枩床になっおいくだけです。なんか動いおいるのは JavaScript の゚ンゞンが賢いだけで、そのうちどこかで厩壊しおしたうかもしれたせん。 TypeScriptに限った話ではありたせんが、知らずに䜿甚するず危険なコヌドを曞いおしたう可胜性がありたす。 埌述する孊習媒䜓では、このような機胜を正しく知り、効果的に䜿甚する方法を孊ぶこずができたす。 JavaScript , TypeScriptの孊習媒䜓に぀いお では具䜓的にどうやっおTypeScript, JavaScript に入門しおいくかです。 TypeScriptはずおも人気な蚀語で、資料もたくさんありたす。 JavaScript はずおも歎史が長いので、叀くなっおしたった資料なども倚くありたす。 実際私も資料探しにはかなり苊戊したした。資料が倚く、これから入門する方からすればどれがいいかわからないのかは圓たり前です。 様々な 有識者 の方にご教授いただき、私が JavaScript , TypeScriptに入門し、孊習しおいく䞭で特に参考になったwebサむトや曞籍を玹介したす。 JavaScript 入門したい方におすすめ JavaScript Primer jsprimer.net これから JavaScript に入門したい、たたは JavaScript を雰囲気で曞いおいるずいう方におすすめのwebサむトです。 JavaScript を䜓系的に、か぀実践的な䜿甚方法を孊ぶこずができたす。 これ1぀で JavaScript の基本はマスタヌできたす。 JavaScript の曞籍をいく぀か読みたしたが、 JavaScript Primerは本圓に必芁なこずだけを抜出し、実際の業務で圹立぀Tipsなどが豊富です。 䟋えば、倉数ず宣蚀の項で var の䜿甚は避けるべきずいうこずが曞いおあったりしたす。普段 JavaScript を曞いおいる方からするず圓たり前かもしれたせんが、入門者的には ゚ビデンス 付きで説明しおくれおいる教材はありがたく、ずおも貎重です。 もちろん非同期凊理に぀いおも深く觊れられおおり、 Promise や async/await ぞの理解にずおも圹立ちたした。 私も実務では MDN ず䜵せおバむブルにしおいたした。 応甚線ではVanilla JSでアプリケヌションを構築する話で、 コンポヌネント の実装たで行っおいたすが、TypeScriptの孊習ずいう点においおはあたり関係が無いので進めるかどうかは奜みです。 ちなみに、曞籍版もありたすので、玙で読みたいずいう方はこちらもどうぞ。 https://www.amazon.co.jp/dp/4048930737/ www.amazon.co.jp TypeScript Playground www.typescriptlang.org JavaScript Primerで JavaScript の基本はマスタヌできたず思うので、次はTypeScriptに入門しおいきたしょう。 蚀語の勉匷をするためにはやはり自分の手で曞くのが䞀番です。曞くためには実行環境を甚意しなければなりたせんが、そんなずきは TypeScript Playground を利甚するこずで、即座に実行環境を甚意するこずができたす。 このPlaygroundの良いずころは、TypeScriptの コンパむル 結果などを右のペむンに衚瀺しおくれるこずです。 TypeScriptが コンパむル された結果どのような JavaScript が出力されるのか確認するこずができたす。 enum など、 JavaScript にない機胜がどのように コンパむル されるかを芋るだけでもずおも勉匷になりたす。 ※ 以降のタむトルにナンバリングしおいたすが、番号の順に読んでいくのが良いのではないかず筆者は勝手に思っおいたす。 1. TypeScript Deep Dive typescript-jp.gitbook.io 鉄板のWebサむトです。TypeScript commiterの方が曞いおくださっおいるドキュメントで、有志の方たちによっお日本語化もされおいたす。 基本的にTypeScriptぞの入門向けの解説が倚いため、ずおも分かりやすく、基本的な䜿い方はここで孊べるようになっおいたす。 たた、テストツヌルや呚蟺ラむブラリぞの簡単な解説などもあるので、発展的な内容や実務で䜿う際ぞの足がかりになりたす。 TypeScriptに入門する䞊では欠かせないwebサむトです。 2. 実践TypeScript www.amazon.co.jp TypeScript Deep Dive を孊習したあなたはTypeScriptの入門レベルを既に超えおいたす。 次の䞀歩に螏み出すためには実践TypeScriptがおすすめです。 実践TypeScriptでは、実際にTypeScriptずVueやReactなどのラむブラリを䜿甚しおアプリケヌションのコヌドを曞く際に非垞に参考になる䞀冊です。 導入線ず実践線の2章構成で、TypeScript Deep Diveを孊習された方なら導入線の方の最初の方はサクサク進めるこずができるんじゃないかず思いたす。導入線の埌半では、 Conditional Type や Mapped Type ずいった難易床の高い型 組み蟌み型の䜿甚方法 の項目がありたす。TypeScript固有の曞き方なので少しずっ぀きにくいですが、これらは型の操䜜やラむブラリの型を読む䞊では欠かせないので、しっかりキャッチアップしたいです。 実践線になるずVueずReact、ナニバヌサ ルフレ ヌムワヌクであるNuxt, NextぞのTypeScriptの導入方法、それぞれの フレヌムワヌク においおTypeScriptで良いコヌドを曞くためのノりハりが曞かれおいたす。 サンプルコヌドが非垞に豊富で、Vueの章なんかでは結構困りがちなVuexの型付けを筆者の方がほがむチから曞いおいるサンプルなどがあり、非垞に参考になりたす。 3. プログラミング TypeScript https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0TypeScript-%E2%80%95%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8BJavaScript%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-Boris-Cherny/dp/4873119049 www.amazon.co.jp TypeScriptの蚀語仕様が䜓系的にたずたった䞀冊です。 最初はプリミティブ型のような簡単な項目から、前項でも少し出おきた Conditional Type や Mapped Type のより詳现を知るこずができたす。最埌半になるずASTの API (TypeScriptのコヌドを解析する仕組み)たでありたす。 ASTはアプリケヌションのコヌドを曞く䞊では必芁ないず思いたすが、興味がある方は曎に孊習を深めおみおはいかがでしょうか。 実践TypeScriptず比范しお、こちらは蚀語仕様がかなり詳しく曞かれおいたす。 たた、こちらにも珟堎で圹に立぀Tipsや デザむンパタヌン が茉っおいるため、実践TypeScriptず䜵せお読むのがおすすめです。 4. Type Challenge github.com Type Challenge では、型の実装にチャレンゞするこずができたす。 ここたで孊ばれた方はおそらくアプリケヌションのコヌドを曞くのに䞍自由ないレベルの知識は埗られたのではないでしょうか。アプリケヌションのコヌドでは自分で耇雑な型を自䜜するずいうのは結構皀ではありたすが、0では無いのでしっかり曞けるようになりたいずころです。 ここたで孊習された方はおそらく、 Mapped Type や Conditional Type のような独自の蚘法でもなんずなく読めるし、ラむブラリの型も結構むケるくらいのレベル感だず思っおいたす。ですが、実際曞けるかどうかはあたり自信がありたせん。私もそうでした。 そんなあなたは Type Challenge に挑戊しおみたしょう。 たず、READMEの Challenges から取り組む問題を遞択したす。 Take The Challenge のラベルを抌すずPlaygroundが開くので、問題で指定されおいる芁件の型を䜜成したしょう。 テストケヌスも甚意されおいるので、解答のチェックも簡単です。 問題をずき終わったらIssueを芋おみたしょう。他の方の解答を芋るこずができたす。自信がある解答を䜜るこずができたずいう堎合は自分の解答をIssueに投げおみたしょう。埌半の耇雑な型の解法は自分が党く思い぀かなかったものもあったりするのでずおも面癜いず思いたす。 最埌に いかがでしたでしょうか。おそらくここたでやり蟌めば、TypeScriptの蚀語仕様はかなりキャッチアップできたのでは無いかず思いたす。その埌はVueやReactのようなラむブラリを孊んだり、webpackなどの呚蟺ツヌルに぀いお孊ぶのも良いず思いたす。 私自身、TypeScriptどころか JavaScript 入門者でしたが、これらの曞籍やwebサむトのおかげでTypeScriptぞ入門し、業務で開発を行うこずができたした。この蚘事がTypeScript入門ぞの足がかりになっおいれば幞いです。たた、孊習する䞭でフロント゚ンドぞの興味がより匷くなったので、今埌は各皮ラむブラリの孊習や、 OSS ぞのコミットを目指しおやっおいこうず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : Stack Overflowの開発者の䞭で愛されおいる蚀語ランキング などでも2䜍を獲埗しおいたす。 *2 : 本来はキヌのチェックや゚ラヌのチェックを行う必芁がありたすが簡略化のため省略しおいたす
こんにちは、株匏䌚瀟 ラク スで先行技術怜蚌や、ビゞネス郚門に技術情報を提䟛する取り組みを行っおいる技術掚進課に所属しおいる鈎朚 @moomooya です。 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」 改め 「技術掚進プロゞェクト」 ずいうプロゞェクトがありたす。 2020幎床は通幎で「無停止リリヌス」に぀いお取り組んでいるので、途䞭ではありたすが玹介したいず思いたす。 今たでの蚘事はかみせんカテゎリからどうぞ。 tech-blog.rakus.co.jp 今回の目暙 「無停止リリヌス」の定矩 考慮するポむント セッション管理 リリヌス䞭のログむンセッション維持 叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 アプリケヌション構成 リリヌス䞭の凊理トランザクションの正垞終了 リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない DB運甹 どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず どのタむミングでもDBにアクセスできるこず たずめ 今埌の蚈画 今回の目暙 匊瀟のサヌビスはBtoBのサヌビスであるこずもあり、倚くのナヌザヌが営業時間倖ずなる倜間に蚈画停止を行っおのリリヌスを行っおいたした。 しかし今埌サヌビス芏暡の増倧にずもない、極力停止しないリリヌスが求められるこずや、゚ンゞニアの倜間䜜業を避けるために、リリヌス時も極力サヌビスを止めない構成を暡玢したす。 「無停止リリヌス」の定矩 完党な無停止を目指すず倧芏暡な分散システムにするなどコスト面で厳しい構成になるず考えられたので、あくたで「ナヌザヌの利䟿性を極力損なわずにサヌビスを提䟛し続ける」ずいう方針で怜蚎したした。 具䜓的には以䞋のような芁件を挙げおいたす。 ナヌザビリティ の確保 ログむンセッションが切られるこずなくログむン状態を維持できる 操䜜内容が「なかったこず」にならないようにする システム的な完党無停止は目的にしない 内郚的な停止は局所化極小化を目指す 圱響がでる郚分に぀いおUI偎でフォロヌ可胜な構成を目指す プログレスバヌ を出せるようにする 凊理完了ではなく凊理受付ずしおレスポンスを返す など 考慮するポむント 「 ナヌザビリティ を䜎䞋させない」芁件をもう少し噛み砕くず以䞋のような芁玠にたずめられるず考えたした。 セッション管理 リリヌス䞭もログむンセッションが切断されない 叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 アプリケヌション構成 リリヌス䞭も凊理 トランザクション が正垞終了する リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない DB運甹 どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず どのタむミングでもDBにアクセスできるこず セッション管理 セッション管理においお リリヌス䞭もログむンセッションが切断されない 䞀定期間経過埌に叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 ずいう芁件を満たす方法を考えたした。 リリヌス䞭のログむンセッション維持 たず「リリヌス䞭にログむンセッションが切断されない」ずいうこずを逆に考えるず、なぜリリヌス䜜業においおログむンセッションが途切れるのかずいう話になりたす。 もっずもシンプルなログむンセッションの保持方法は アプリケヌションサヌバ ヌに保持させるこずですが、この堎合は保持しおいる アプリケヌションサヌバ ヌを再起動しおしたうずログむンセッションが倱われたす。 そこでログむンセッションの保持を アプリケヌションサヌバ ヌの倖に出す必芁がありたす。デヌタベヌスサヌバヌに保持するこずで アプリケヌションサヌバ ヌの再起動の圱響を受けない デヌタベヌスサヌバヌの再起動でも正副サヌバヌのデヌタを同期しおいるので消倱しない ずリリヌス䞭のログむンセッション維持は実珟できそうです。 ただ実珟は出来るものの、ログむンセッションの砎棄凊理をアプリケヌションに実装する必芁が生たれたり、頻繁なデヌタベヌスアクセスが発生しおしたうずいう課題が生たれたす。 これらを解決するためにRedisをセッションサヌバヌずしお採甚するこずを怜蚎したした。 クラりド ネむティブな構成では AWS だずElastiCacheを利甚しお比范的よく採甚される構成だず思いたす。 Redisを採甚するモチベヌションずしおは以䞋の点が挙げられたす。 むンメモリデヌタベヌスなので小さなデヌタを頻繁にアクセスする甚途に最適 key- value 型のDBだけどログむンセッションの維持に䜿うなら十分 レコヌドに TTL : Time To Live(有効期限)を蚭定するこずで自動砎棄ができる TTL は曎新も可胜なので「最終アクセスから n 秒」ずいう指定が容易 DBで保持したずきのように 冗長化 も可胜 叀いバヌゞョンのログむンナヌザヌのみ匷制ログアりト可胜 バヌゞョンが混圚しおも利甚可胜にはするものの、い぀たでも叀いバヌゞョンからのアクセスを有効にし続けるわけにもいきたせん。いずれは叀いバヌゞョンのログむンセッションを砎棄する必芁がありたす。ただしこのずきも新しいログむンセッションには圱響を出したくありたせん。 これを実珟するために「ログむン凊理をどのバヌゞョンで行ったか」を蚘録するこずで実珟できるず考えたした。セッションデヌタにアプリケヌションバヌゞョンのデヌタを残すのです。 " (token_id) ": { " user_id ": xxxxxxxxx , " app_ver ": 1.0 } のようなむメヌゞです。 これによりセッションサヌバヌから { "app_ver": 1.0 } のログむンセッションを削陀するなどしお、指定したバヌゞョンでログむンセッションを維持しおいるナヌザヌのみを匷制ログアりト可胜にしたす。 アプリケヌション構成 アプリケヌション構成においお リリヌス䞭も凊理 トランザクション が正垞終了する リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない ずいう芁件を満たす方法を考えたした。 リリヌス䞭の凊理 トランザクション の正垞終了 こちらは蚀い換えるず凊理䞭 トランザクション の完了を埅っおからリリヌス凊理をしおあげればいいわけなので、リク ゚ス ト振り分けを止めお埅っおあげればいいです。 HTTP Proxyで振り分け制埡をするわけですが、リリヌスの開始刀断は人間がやるずしおも振り分け制埡自䜓は自動でやりたいです。実珟するための機胜ずしおは振り分け先ノヌドのステヌタスを刀断するActive Health Checkず、リク ゚ス トが完了するたで切断しないDraining Modeを䜿っおあげれば実珟できたす。 圓初この郚分に nginx を利甚しようずしおいたしたが、Active Health CheckずDraining Modeがnginx+有償版でないず䜿えないずいうこずがわかりたした。システム構成的にコストが芋合わなかった 1 ので、別の゜リュヌションを探すこずにしたした。そこで Apache を確認しおみるず無償版でも利甚できるずいうこずだったので、 Apache を採甚しおいたす。 なお Apache はnginxの普及以降「重い」ずいう印象がありたしたが、 Apache 2.4系を評䟡し盎しおみるず既に改善されおいるようだったこずも今回の採甚に぀ながっおいたす。 リリヌス前埌のサヌバヌが混圚しおいる状態でいずれの環境にアクセスしおいおも正垞に凊理される API バヌゞョンを耇数サポヌトするずいう話ですが、詊行錯誀した結果サンプル実装では以䞋のような ゜ヌスコヌド の構成にしおいたす。 / |--app.py # Webアプリ本䜓。`v1/api.py`を読み蟌み |--README.md |--requirements.txt |--v1/ # APIバヌゞョン:1 の゜ヌスコヌドディレクトリ | | # v3 を䜜るずきに削陀される想定 | |--__init__.py | |--api.py # ゚ンドポむントを定矩 | |--assets.py # 実凊理モゞュヌル | |--auth.py # 実凊理モゞュヌル | |--users.py # 実凊理モゞュヌル |--v2/ # APIバヌゞョン:2 を䜜るずきは v1 をコピヌしお改修 りェブアプリケヌション フレヌムワヌク に甚意されおいる、パスを指定しお ルヌタヌ モゞュヌルを読み蟌む機胜Path Groupずか呌ばれる機胜。FlaskだずBlueprintでバヌゞョンごずのモゞュヌルを読み蟌みたす。 # app.py #... # バヌゞョンごずのAPI読蟌 from v1.api import api as api_v1 app.register_blueprint(api_v1, url_prefix= '/api/v1' ) # ... # v1/api.py from flask import Flask, Blueprint, jsonify # 実凊理モゞュヌルの読み蟌み from . import auth from . import users from . import assets api = Blueprint( 'api' , __name__) # ゚ンドポむントの定矩 @ api.route ( '/signup' , methods=[ 'POST' ]) def post_signup (): return auth.post_signup() # ... API バヌゞョンが倉わる際にはたるごずコピヌしお別バヌゞョンずしお読み蟌む圢になるので重耇コヌドが発生したすが、今回は2バヌゞョン最新ず1䞖代前たでしかサポヌトしない想定だったので蚱容しおいたす。無理に重耇コヌドをなくすこずよりも、2䞖代前のサポヌトが倖しにくくなるこずを避けるこずを優先したした。 入力パラメヌタの過䞍足がある堎合に異垞な曎新が行われない 無停止でアップデヌトを行うず、 API リク ゚ス トに必芁なパラメヌタが異なったバヌゞョンのアプリケヌションにWebクラむアントが接続されるケヌスが出おきたす。この堎合にも䞍正なデヌタ曎新は行われないようにしなければなりたせん。 必須パラメヌタが䞍足するような組み合わせであれば゚ラヌになるため、デヌタの曎新は行われたせん。゚ラヌ埌に最新バヌゞョンの取埗ず再ログむンを促せれば操䜜を続けられたす。 ゚ラヌも発生させたくない堎合があるず思いたすが、その堎合は API バヌゞョンを倉えお2バヌゞョン受け付けられる状態にするこずになりたす。このずき2バヌゞョンの差異をアプリケヌションずDBで吞収しなければなりたせんが、どんな堎合に吞収できお、どんな堎合に吞収できないのかは今埌怜蚌しおいきたいず思いたす。 DB運甹 DB運甚に぀いお どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず どのタむミングでもDBにアクセスできるこず 再起動䞭やフェヌルオヌバヌ䞭もアクセスできるこず ブロックするこずなく DDL 操䜜を行えるこず ずいう芁件を満たす方法を怜蚎したした。 どのタむミングでもク゚リが消倱せずに敎合性が保たれるこず こちらに関しおは新たなク゚リリク ゚ス トだけを止めお凊理䞭のク゚リが完了するたでリリヌス担圓゚ンゞニアが芋お刀断する方針にしたした。 珟状の運甚だず、リリヌスの際に完党に 無人 であるこずは考えにくく 機械的 に怜知する必芁性を感じなかったためにこの方針にしおいたす。 新たなク゚リリク ゚ス トの停止に぀いおはDBプロキシである MariaDB MaxScale以䞋、MaxScaleを利甚しお振り分け凊理を行う蚭蚈にしおいたす。 MaxScaleにはフェヌルオヌバヌ時にもアプリケヌション偎からの再詊行を䌎わずに、 トランザクション を喪倱しないよう遅延、再詊行を行う機胜がありたす。 どのタむミングでもDBにアクセスできるこず こちらは想定しおいる条件䞋では「曞き蟌み」に関しおは短時間の停止を避けられたせんでしたが、片系が再起動䞭などでフェヌルオヌバヌが発生しおいる堎合などでも「読み蟌み」は垞時可胜になるよう蚭蚈を進めおいたす。 MaxScaleによっお参照ク゚リず曎新ク゚リの分離、DBサヌバヌノヌドの管理・ 冗長化 を行いたす。 冗長化 されたDBサヌバヌ クラスタ を構成するこずで、無停止で実行できない SQL 操䜜や DBMS 自䜓のアップデヌトがあった堎合にもロヌリングアップデヌトで実行し、ダりンタむムを極力短瞮する予定です。 この際「曞き蟌み」はマスタのフェヌルオヌバヌ䞭だけ実行できなくなりたすが、「読み蟌み」は停止するこずなく垞に実行できる芋蟌みです。 たた、DBに関しおは DDL でどこたでロックされるかもシステム党䜓のアクセス可吊に圱響しおきたす。 MariaDB や MySQL は同じ OSS -DBである PostgreSQL ず比范しおオンラむン DDL の察応で先行しおいたす。 PostgreSQL ではカラム远加などのテヌブル定矩の倉曎操䜜は DML をSELECTでさえ阻害しおしたいたすが、 MariaDB / MySQL は倚くの操䜜がオンラむン DDL に察応しおいるため、テヌブル定矩の倉曎を䌎う堎合でもアクセスできるこずが期埅できたす。ただし、この手の機胜は埀々にしお運甚䞊の制玄が぀きものなので匕き続き実際に動䜜させお怜蚌しおいきたいず思いたす。 たずめ セッションサヌバヌにRedisを採甚しお倖郚化 HTTPプロキシに Apache を採甚 アプリケヌションは最倧2バヌゞョンに察応 DBMS は MariaDB を採甚し、MaxScaleで クラスタ 化 MariaDB のオンラむン DDL を掻甚 今埌の蚈画 ここたでのお話はそれぞれの芁玠のカタログスペックを元にした蚭蚈です。これらが実際に期埅した通りの挙動を実珟しおくれるのかどうかに぀いおは今幎床埌半で怜蚌を進めおいきたいず思いたす怜蚌結果も2021幎3月ごろにブログで共有予定です。 環境の構築 テスト項目、テスト方法の怜蚎 本圓に無停止でリリヌスできるか怜蚌 䜙力があれば PostgreSQL の堎合にどこたでできるか怜蚌 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com 1ノヌド幎間10䞇円。ノヌド数が倚くなりがちなので厳しい料金䜓系でした。 ↩
はじめに こんにちは、tuq376sです。 今回は vim に぀いお玹介しおいきたいず思いたす。 vim ずいうずあたり銎染みのない方には、他の゚ディタを䜿うよりも耇雑で難しいずいう印象があるかもしれたせん。 しかし、あれもこれも芚えなければ基本的な䜿い方さえできないずいうわけでもないのです。 ずいうこずで、本蚘事では vim のむンストヌルからファむルの基本操䜜たでを取り扱っおいきたす。 はじめに むンストヌル手順 vimむンストヌラヌの入手ずむンストヌル 環境倉数の登録 たずはここから、入力ず保存 vimのモヌド カヌ゜ル移動ず入力・保存 ファむル線集の基本操䜜 コピヌ&ペヌスト 取り消し&やり盎し おわりに むンストヌル手順 ずにもかくにもむンストヌルから。 今回は䟋ずしお Windows にむンストヌルする手順で行っおいきたす。 vim むンストヌラ ヌの入手ずむンストヌル たずは vimの公匏サむト ぞアクセスしたす。 巊偎のメニュヌ欄にダりンロヌドがあるので、そこから配垃ペヌゞぞ。 察象のOSを遞べるので Windows を遞択しお、 むンストヌラ ヌをダりンロヌドしたす。 ダりンロヌドが完了したら むンストヌラ ヌを起動しお、オプションの遞択などは党おデフォルトの状態でむンストヌルしたす。 完了するず、デスクトップにショヌトカットが䜜成されたす。 ここから起動できるのは gvim ず呌ばれる GUI で動く vim です。本蚘事では コマンドプロンプト から CUI の vim を䜿甚しおいきたすが、コマンドや操䜜の仕方は CUI で動く vim ず倉わりないようなので奜みの方を利甚するず良いず思いたす。 環境倉数 の登録 vim を CUI で利甚する堎合は忘れずに 環境倉数 も蚭定しおおきたしょう。 「コン トロヌル パネル > システムずセキュリティ > システム 」から、システムの詳现蚭定を遞んで、 「 環境倉数 」を遞択、開いた画面の「システム 環境倉数 」からPathを遞択した状態で「線集」を抌したす。 環境倉数 名の蚭定が開いたら「新芏」を遞んで、 vim .exeの堎所を登録したす。 デフォルトなら C:\Program Files (x86)\Vim\vim82 (82はバヌゞョン名)にあるはずです。 環境倉数 が登録できたら、 コマンドプロンプト を立ち䞊げお vim ず入力しおみたしょう。 以䞋のような画面が立ち䞊がればセットアップ完了です たずはここから、入力ず保存 では実際に vim を䜿っおいきたしょう。 vim は立ち䞊げただけの状態で文字の入力ができたせん。これは、 vim は起動された時は ノヌマルモヌド だからです。 入力を行うには挿入モヌドに切り替える必芁がありたす。 たずはこのモヌドからざっくりず説明しおいきたす。 vim のモヌド vim にはいく぀かのモヌドが存圚し、モヌドによっお操䜜できるこずが倉わりたす。 よく䜿うものは以䞋の4぀です。 ノヌマルモヌド vim を起動したずきの状態であり、党おの䞭心にあるモヌドです。 各モヌドに移動するには ノヌマルモヌド を経由したす。操䜜しおいる間に意図しないモヌドになっおしたったずきは Esc を抌すこずでここに戻るこずができたす。 カヌ゜ルの移動、コピヌやペヌストなどができたす。 挿入モヌド 文字を入力するためのモヌドです。このモヌドにいる間は各キヌは文字入力ずしお扱われたす。 ノヌマルモヌド から i , a などで切り替えるこずができ、どのキヌで切り替えるかで入力䜍眮が倉わりたす。 コマンドモヌド ファむルの保存、 vim の終了などいろいろな操䜜を行うためのモヌドです。 ノヌマルモヌド から : で切り替えたす。コマンドを内容を入力したら Enter で実行したす。 ビゞュアルモヌド 䞻に範囲遞択に関するモヌドで、範囲を遞択したり、遞択した範囲のコピヌなどができたす。 ノヌマルモヌド から v などで切り替えるこずができたす。慣れおきたら掻甚したいモヌドです。 初めはあたりピンずこないず思いたすので、ひずたずはこんなモヌドがあるずいう認識だけで構いたせん。 カヌ゜ル移動ず入力・保存 モヌドに぀いお雰囲気がわかったずころで、ようやくファむルの線集です。 たずは文字を入力するため、挿入モヌドに切り替えたしょう。挿入モヌドに切り替えるキヌは数ありたすが、以䞋の3぀を芚えれば困るこずはありたせん。 挿入モヌドに切り替えたずきの動䜜 キヌ カヌ゜ルの䜍眮から文字を入力できる i カヌ゜ルの右偎から文字を入力できる a カヌ゜ルの行末で改行した状態から文字を入力できる o これらのキヌを入力するず挿入モヌドに切り替わり、 i , a , o も文字入力ずしお認識するようになりたす。 しかし、挿入モヌドの間は入力䜍眮を移動するこずができたせん。 入力䜍眮を切り替えるためには䞀床 Esc を抌しお ノヌマルモヌド に戻る必芁がありたす。 ノヌマルモヌド では、以䞋のキヌでカヌ゜ルを移動できたす。 移動先 キヌ ← h → l ↑ k ↓ j n行目 :n (10行目なら :10 ) 行頭 ^ 行末 $ n行目に移動する方法は厳密には コマンドモヌドで移動したい行数を入力する ずいう動䜜になりたすが、ここはあたり明確に意識するこずも少ないず思いたすので、以降コマンドモヌドの入力は 先頭にコロンが付いおいるノヌマルモヌドでの入力 ずしお扱っおいきたす。 これで、任意の䜍眮にカヌ゜ルを移動しお文字の入力ができるようになりたした。 次はファむルの保存ず vim の終了方法です。以䞋の入力で行えたす。 操䜜内容 キヌ 保存する :w vim を終了する :q 保存しお vim を終了する :wq たたは ZZ 名前を付けお保存する :w ファむル名 ファむル線集の基本操䜜 ここたでできれば、ファむルの線集ずいう最䜎限の機胜は問題なく行えるず思いたす。 けれどただ文字を入力できるだけでぱディタずしおは物足りないもの。どんな゚ディタにもあるような機胜はもちろん vim にも備わっおいるので、こちらも玹介しおいきたす。 コピヌ&ペヌスト 線集に必須機胜その、コピヌずペヌスト。 vim ではこれを行う機胜を「ダンク」「プット」ずそれぞれ呌びたす。 たずは ノヌマルモヌド だけで行える方法から芋おいきたす。 操䜜内容 キヌ n行をダンクする nyy (10行コピヌする堎合は 10yy ) n行を削陀する ndd (10行削陀する堎合は 10dd ) ダンクしたものをプットする p ダンクず削陀は察象の行数を指定するようになっおいたすが、1行の堎合は数字を省略しお yy , dd ずするこずができたす。 たた、 dd に぀いおは削陀ずいうよりは切り取りに近く、 yy したものず同様に p で貌り付けるこずができたす。 しかしこれでは行単䜍でしか操䜜ができたせん。他の゚ディタならマりスを䜿っお任意の範囲をコピヌするずころですが、 vim ではこれをビゞュアルモヌドを䜿っお行いたす。 ビゞュアルモヌドは挿入モヌドず同じく、切り替えるキヌによっお動䜜が異なりたす。 ビゞュアルモヌドに切り替えたずきの動䜜 キヌ カヌ゜ル䜍眮から範囲遞択を行える v カヌ゜ル䜍眮から矩圢遞択を行える Ctrl-v カヌ゜ル行から行遞択を行える V ビゞュアルモヌドでは ノヌマルモヌド ず同じカヌ゜ル移動を行えたす。 v なら移動した䜍眮たでの文字を、 Ctrl-v なら移動した䜍眮を察角に持぀短圢範囲を、 V なら移動した䜍眮たでの行範囲をずいった具合に範囲が遞択されたす。 遞択した範囲に察しお行える䞻な操䜜は以䞋です。 操䜜内容 キヌ 遞択範囲をダンクしお ノヌマルモヌド に移行する y 遞択範囲を削陀しお ノヌマルモヌド に移行する d 遞択範囲を削陀しお挿入モヌドに移行する c 各入力はそれぞれモヌドを移行するようになっおいたす。 c ならば挿入モヌドに移行し、任意の入力を行った埌は通垞の挿入モヌドず同じく Esc で ノヌマルモヌド に戻るこずができたす。 これで、行単䜍でなくずもダンクずプットが行えるようになりたした。 取り消し&やり盎し 本蚘事最埌ずなるのは、線集に必須機胜その、操䜜の取り消しずやり盎しに぀いおです。 それぞれの操䜜は以䞋のようになりたす。 操䜜内容 キヌ 操䜜を取り消す u もう䞀床操䜜する(取り消した操䜜を再床行う) Ctrl-r vim では耇数の操䜜を戻るこずができるため uu ず入力するこずで2぀前の操䜜たで戻るこずができたす。 ずころが vim の元で基本的な操䜜が同じ゚ディタのviでは、戻るこずのできる操䜜は1぀のみです。viを䜿う際は uu ず入力するず「操䜜を取り消す→取り消した操䜜を再床行う」ずいう動䜜になるので泚意が必芁です。 おわりに 今回はむンストヌルからずいうこずもあっお、本圓に基本的な操䜜だけを列挙する圢になりたした。 vim はもっず䟿利でバリ゚ヌション豊富なコマンドや操䜜、カスタマむズできる郚分もたくさんあっお、それゆえに掚しおいる方ずいうのは倚いのだず思いたす。 しかし自分の蚘憶を思い起こしおみるず、䜿い始めおしばらくは「iで文字を入力しおZZで保存しお閉じる」くらいしか芚えられなかったずいうのもあっお、本蚘事では「最䜎限のファむル線集に困らない皋床」を目指すこずにしたした。 たたい぀か、今床はもう少し䟿利な䜿い方の玹介もしおみたいなず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに はじめたしお、tsudachantanです。 珟圚、様々なサむトで広く䜿われおいる SVG ファむル。 CSS ずずもに SVG が必須になるずもいわれ、デザむナヌやフロント゚ンゞニアの方にはお銎染みかもしれたせん。 今回は改めお、具䜓的にどのようなフォヌマットのファむルなのか、特城ず倉換方法に぀いお玹介しおいきたす 目次 はじめに SVGファむルが普及しおいるワケ SVGファむルずは JPEG、PNG画像圢匏ずの違い メリット 拡匵性・汎甚性が高い フィルタヌ、アニメヌション衚珟が可胜 デメリット SVGファむルの䜜成方法 PNGをSVGに倉換しおみよう SVGファむルをPNGに倉換する方法 おわりに   SVG ファむルが普及しおいるワケ Webブラりザ 最倧手の IE は長らく SVG に察応しおおらず、 サポヌトされおいるブラりザが少ないこずから普及したせんでした。 しかし珟圚、 IE9 をはじめ察応するブラりザが増えたこずにより倚くのホヌムペヌゞが掻甚しおいたす。 たた、近幎はレスポンシブデザむンず フラットデザむン が䞻流ずなっおおり、それらず盞性のいい SVG ファむルの需芁は高たっおいたす。 SVG ファむルずは SVG Scalable Vector Graphics)は画像フォヌマットの䞀皮です。 SVG ファむルはその名( Vector )の通り、ベクタ圢匏のデヌタです。 画像ファむルである SVG ですが、 XML に準拠しおおり、 テキスト゚ディタ で線集するこずも可胜です。 JPEG 、 PNG 画像圢匏ずの違い 画像ファむルずしおよく甚いられる JPEG 、 PNG ですが、これらはラスタ圢匏の画像ファむルです。 ラスタ圢匏は点pixelで画像を衚珟しおいたす。 こちらの PNG 画像をご芧ください。 PNG 画像 どんどん拡倧しおいくず   拡倧した PNG ギザギザずドットのようなものが芋えおきたすね。 画質を䞊げるためには点の数、぀たり解像床を䞊げおいく必芁があり、デヌタの容量も倧きくなりたす。 線集を重ねるず画像が劣化しやすく、ファむルサむズも倧きくなりがちです。 䞀方、 SVG ファむルはベクタ圢匏の画像ファむルです。 ベクタ圢匏ずは、画像や文字などの2次元情報を数倀化しお蚘録しおおり、ブラりザがその堎で描画しおくれたす。 解像床を気にするこずも、拡倧瞮小でデヌタが劣化するこずもありたせん。 䞻に、アむコンや地図、平面的なむラストなどを䜜成するずきにはベクタ圢匏が採甚されおいたす。 メリット 拡匵性・汎甚性が高い Scalableの文字通り、䌞瞮可胜性に優れた SVG は、埌から色・サむズ・文字の倉曎が容易です。 レスポンシブなサむトを構築する際に、 PNG などのラスタ圢匏だずデ バむス 毎に耇数のバヌゞョンを䜜成する必芁がありたすが、 ベクタ圢匏の SVG を䜿えば1぀のファむルで察応できたす。 たた、 SVG は Retinaディスプレむ *1 にも察応しおいたす。 これにより、Webペヌゞのレスポンス向䞊も期埅できるでしょう。 拡倧瞮小による画像の劣化もないため、レスポンシブデザむンずの盞性も良い画像ファむルです。 フィルタヌ、アニメヌション衚珟が可胜 SVG ファむルは、 CSS や JavaScript 、動画䜜成゜フトなどを䜿っおアニメヌションを衚瀺するこずができたす。 今たでアニメヌションずいえばGIFを photoshop や Flash で䜜るのが䞀般的でしたが SVG はGIFでは扱えない透過も利甚できたす。 参考 ics.media www.e-webseisaku.com デメリット ずはいえ SVG ファむルも䞇胜ではありたせん。 SVG ファむルは写真のような耇雑な陰圱を衚珟する画像には䞍向きです。 颚景などの画像を数倀ずしお扱うためには、膚倧な量の蚈算が必芁になるからです。 たた、珟圚はほずんどのブラりザで察応しおいたすが、たれに未察応のブラりザも存圚したす。 SVG ファむルの䜜成方法 SVG ファむルの䜜成方法は、 ベクタヌ 画像を䜜成できるツヌルを利甚するこずです。 䞀般的には Adobe Illustrator や Adobe Photoshop ずいった画像線集゜フトを利甚したす。 illustrator などを䜿っお、 SVG にしたいベクタ圢匏のファむルを開いお、拡匵子を. svg にしお保存したす。 もちろん、 テキスト゚ディタ で䜜成するこずも可胜です。 PNG を SVG に倉換しおみよう 元デヌタがベクタ圢匏でない堎合も、 SVG に倉換するこずは可胜です。 ブラりザ䞊で完結する倉換ツヌルを䜿っお倉換しおみたしょう。 怜玢するずいろいろ出おくるのですが、今回は  Online Image Vectorizer  を䜿甚しおいきたす。 www.vectorizer.io 察応しおいるフォヌマットは PNG 、 BMP 、 JPEG です。 たた、 SVG だけでなくEPS、DXFずいった ベクタヌ 圢匏に倉換するこずも可胜です。 時間圓たりの倉換できるファむル数に制限がありたすが、基本的に無料で䜿えたす。 䜿い方はいたっおシンプルで、倉換したいファむルをアップロヌドするだけで SVG ファむルに倉換しおくれたす。 vectorizer 巊が倉換前の PNG ファむルで、右が倉換埌の SVG ファむルです。 vectorizer-拡倧 拡倧しおみるず、ラスタ圢匏の PNG ファむルはギザギザしおいたすね。 無事、 ベクタヌ 圢匏に倉換されおいるこずがわかりたす。 サむズは 7KB→2KB になりたした SVG ファむルの䞭身 倉換された SVG ファむルの䞭身はこんな感じ。 ちなみに、先述したように SVG が苊手ずする写真のような耇雑な描画の PNG ファむルを倉換するず   vectorizer-写真 巊が倉換前の PNG ファむル、右が倉換埌の SVG ファむルです。 ぱっず芋た感じ悪くないですが、 179 KB→542KB ず、かなりサむズが倧きくなっおいしたいたした 。 vectorizer-写真-拡倧 こちらも拡倧するずこんな感じ。 倉換した SVG ファむルのほうは、いくら拡倧しおもギザギザになるこずはありたせん。 ただ、耇雑な色の濃淡を数匏で衚珟するずなるず、やはりデヌタ量が膚倧になっおしたいたす。 SVG ファむルを PNG に倉換する方法 SVG ファむルを PNG に倉換したいずきはこちら SVG to PNG – SVGファイルをネット上でPNGに変換する svgtopng.com 䜿い方は簡単、 PNG に倉換したい SVG ファむルをアップロヌドするだけです。 䞀床に20個たで倉換でき、たずめおZIPでダりンロヌドするこずも可胜です。 おわりに 様々な皮類がある画像フォヌマットの䞭から、 SVG の特城を簡単に玹介させおいただきたした。 適切な画像フォヌマットを遞択できるよう、ぜひ本蚘事を参考に倉換しおみおください。   ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 https://rakus.hubspotpagebuilder.com/visit_engineer/ rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : Apple 補品の高画玠密床ディスプレむ
こんにちは、開発゚ンゞニアの amdaba_sk ペンネ ヌム未定です。 昚幎床たで、 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」ずいうプロゞェクトがありたした。本幎床からは芏暡を拡倧し、「技術掚進プロゞェクト」ず名称を改めお再スタヌトされたした。 本蚘事では、昚幎床かみせんプロゞェクトずしおの最埌のテヌマずなった 機械孊習 テヌマの延長ずしお 2020 幎床䞊期に行った「AutoML ツヌルの調査ず評䟡」に぀いお取り組み結果を報告したす。 ちなみに 機械孊習 テヌマは前幎床から継続しおいたこずもあり、䞊期で終了ずなっおしたいたした。残念   なお過去の報告蚘事はかみせんカテゎリからどうぞ。技術掚進プロゞェクトでは 機械孊習 だけではなく、他にもいろいろなテヌマで怜蚌を行っおいたす。どれも面癜そうなテヌマですので是非そちらの報告もご芧ください。 tech-blog.rakus.co.jp はじめに 怜蚌の方法 デヌタセット モデル孊習の埓来手法に぀いお 調査察象ずした AutoML サヌビス 調査察象ずした AutoML ラむブラリ 結果 モデル孊習の䜜業時間ず性胜 埓来手法 AutoML クラりドサヌビス AutoML ラむブラリ 考察ず所感 埓来手法ず AutoML AutoML サヌビスずラむブラリの比范 AutoML サヌビス間の比范 Amazon SageMaker AutoPilot Google Cloud AutoML Tables IBM Watson Studio AutoAI Microsoft Azure AutoML AutoML ラむブラリ間の比范 auto-sklearn H2O.ai TransmogrifAI AutoKeras たずめ 参考 はじめに AutoML ずは、簡単に蚀えば 機械孊習 のプロセスを自動化し、デヌ タセット ず最重芁芖する評䟡指暙を指定するだけで最適なモデルを構築する仕組みのこずです。 機械孊習 を䜿甚しお良いパフォヌマンスを埗るためには、通垞、デヌタ収集、特城量゚ンゞニアリング、モデルや アルゎリズム の遞択ずいった䜜業に人手による詊行錯誀が必芁ずなり、コストがかかりたす。AutoML では、Figure 1 に瀺すように 機械孊習 アプリケヌションの構築パむプラむンの䞀郚を自動化するこずで、手動でのモデル孊習よりも高い性胜を持぀ 機械孊習 モデルの効率的な構築を目指したす。 Figure 1. 機械孊習 アプリケヌションの兞型的なパむプラむンず AutoML の掻甚範囲Q. Yao, et al., "`Taking the Human out of Learning Applications: A Survey on Automated Machine Learning`" より匕甚 今回の技術掚進プロゞェクトでは、そんな䟿利そうな AutoML を、公開されたデヌ タセット に察しお実際に䜿っおみるこずで、効率的にモデル孊習ができるこずを確かめたした。たた AutoML を提䟛するサヌビス、ラむブラリを耇数詊甚し、それぞれを比べおみたした。 怜蚌の方法 特定のデヌ タセット に぀いお、遞定したサヌビスやラむブラリを甚いお実際にモデル孊習を行い、モデル孊習のための䜜業時間ず埗られたモデルの性胜に぀いお調べたした。たた同じデヌ タセット に぀いお、埓来の方法でモデル孊習 スクリプト を䜜成し、その䜜業時間ず埗られたモデルの性胜を AutoML を䜿甚した堎合の結果ず比范したした。 デヌ タセット 怜蚌のためのデヌ タセット ずしお Bank marketing デヌ タセット を甚いたした。 このデヌ タセット は クリ゚むティブ・コモンズ CC0: Public Domain のラむセンスで利甚できるオヌプンデヌタであり、テヌブル圢匏になっおいたす。 今回怜蚌の察象ずしたサヌビスの䞭にはデヌ タセット の最小サむズが蚭定されおいるものがあり、有名な Titanic dataset や Iris flower dataset はサむズが足りずに䜿うこずが出来たせんでした。Bank marketing は 埌述する Google Cloud AutoML Tables の チュヌトリアル で甚いられおいるデヌ タセット であり、サむズも充分であるためこれを甚いたした。 Bank marketing デヌ タセット は ポルトガル のずある銀行が行った ダむレクトマヌケティング キャンペヌンの結果です。職業、幎霢などの顧客デヌタずキャンペヌン商品を賌入したかどうかが蚘録されおいたす。 Table 2 に瀺したようにクラスごずのデヌタ件数にはかなりの偏りがあるデヌタです。 デヌタ件数 :: 45211 ä»¶ Table 1 . カラム情報 No. カラム名 デヌタタむプ 説明 1 age 数倀 幎霢 2 job カテゎリ 職業の皮類 3 marital カテゎリ 婚姻状態 4 education カテゎリ å­Šæ­Ž 5 default カテゎリ 債務䞍履行 の有無 6 balance 数倀 幎平均残高ナヌロ 7 housing カテゎリ 䜏宅ロヌンの有無 8 loan カテゎリ 個人ロヌンの有無 9 contact カテゎリ 連絡先端末の皮類 10 day 数倀 月の最埌の連絡日 11 month カテゎリ 幎の最埌の連絡月 12 duration 数倀 最埌の連絡時の通話時間秒 1 13 campaign 数倀 キャンペヌン䞭の連絡回数 14 pdays 数倀 前回のキャンペヌンでの最埌の連絡からの経過日数 15 previous 数倀 前回のキャンペヌンでの連絡回数 16 poutcome カテゎリ 前回のキャンペヌンでの結果 17 y バむナリ 顧客が定期預金に加入したかどうか1 : 非加入、2 : 加入 Table 2 . クラスごずの件数比率 クラス 件数 比率 1 39922 0.88 2 5289 0.12 モデル孊習の埓来手法に぀いお 埓来手法ずしお、以䞋の工皋を経おモデル孊習ず性胜指暙の算出を行う スクリプト を自䜜したした。 デヌ タセット の読み蟌み デヌタの前凊理 䜿甚するデヌタ列の取捚遞択 カテゎリデヌタのダミヌ倉数化 数倀デヌタの敎圢 孊習デヌタずテストデヌタの分割 モデル孊習 孊習デヌタに察する CV 怜蚌を甚いたハむパヌパラメヌタ調節 調敎されたハむパヌパラメヌタでの孊習デヌタによる孊習 テストデヌタによる性胜枬定 蚀語は Python 3 を甚いたした。ラむブラリずしお Pandas、scikit-learn を甚い、Jupyter Notebook ずしお䜜成したした。デヌ タセット は CSV ファむル圢匏で䜜成しおおき、 スクリプト 内で読み蟌んで䜿甚したした。 たた 4 のモデル孊習の際、いく぀かの アルゎリズム で孊習したモデルの性胜を比范し、最も高い性胜を瀺した アルゎリズム を結果ずしお採甚したした。その際の候補ずなる孊習 アルゎリズム は scikit-learn のアルゎリズム遞定チヌトシヌト をもずに第䞀候補を決め、加えおよく甚いられる代衚的な アルゎリズム を遞びたした。最終的に詊した アルゎリズム は以䞋の通りです。 線圢 サポヌトベクタヌマシン  SVM  k 近傍法KNN 線圢刀別分析LDA ランダムフォレスト分類噚 RFC  倚局 パヌセプトロン 分類噚 MLP  ガりス モデル単玔 ベむズ 分類噚GNB 今回䜿甚するデヌ タセット は前述の通り偏りが倧きいため、ハむパヌパラメヌタ調敎ず各 アルゎリズム でのモデルの性胜比范においお正答率ではなく F1 倀のマクロ平均を最適化の基準ずしお甚いおいたす。 調査察象ずした AutoML サヌビス クラりド サヌビスを䜿っお AutoML を行う䟋ずしお、以䞋の 4 ぀のサヌビスを詊したした。 Amazon SageMaker AutoPilot Google Cloud AutoML Tables IBM Watson Studio AutoAI Microsoft Azure AutoML AutoML の実行の際、最適化の基準ずなる指暙には F1 倀ないしそれに近い甚途の指暙を甚いたした。他の蚭定は各サヌビスのデフォルトの蚭定のたた行っおいたす。サヌビスによっおは F1 倀が遞択できないものもあり、そのためサヌビスごずに異なる指暙が最適化の基準ずしお甚いるこずになりたした。 調査察象ずした AutoML ラむブラリ ラむブラリを䜿っお AutoML を行う䟋ずしお、以䞋の 4 ぀のラむブラリを詊したした。 auto-sklearn H2O.ai TransmogrifAI AutoKeras ラむブラリに぀いおもサヌビスの堎合ず同様、最適化の基準ずなる指暙には F1 倀ないしそれに近い甚途の指暙を甚いたした。他の蚭定は各ラむブラリのデフォルトの蚭定のたたで行っおいたす。ラむブラリによっおは F1 倀が遞択できないものもあり、そのためラむブラリごずに異なる指暙が最適化の基準ずしお甚いるこずになりたした。 結果 モデル孊習の䜜業時間ず性胜 Table 3 に今回詊した各手法での䜜業時間時間、最良モデルの アルゎリズム 、基準ずした評䟡指暙、最良モデルの正答率、F1 倀マクロ平均をたずめたした。以䞋、この結果をひず぀ず぀芋おいきたす。 Table 3 モデル孊習の結果。「Kaggle 投皿」は本怜蚌で甚いたものず同䞀のデヌ タセット に察しお Kaggle に投皿された埓来手法でのモデル孊習結果。H. Yamahata, "Bank Marketing + Classification + ROC ,F1,RECALL..." より匕甚 ゚ントリヌ 䜜業時間 (h) 基準指暙 最良 アルゎリズム 正答率 F1 倀マクロ平均 埓来手法 自䜜 スクリプト 2.5 F1 倀マクロ平均 GNB 0.80 0.58 Kaggle 投皿 - 適合率 KNN 0.90 0.88 AutoML クラりド サヌビス Amazon SageMaker AutoPilot < 1.0 F1 倀マクロ平均 XGBoost N/A 0.71 Google Cloud AutoML Tables < 0.5 AUC ROC GDBT 0.90 0.65 IBM Watson Studio AutoAI < 0.5 F1 倀マクロ平均 XGB 分類噚 0.88 0.70 Microsoft Azure AutoML < 0.5 加重 AUC ROC VotingEnsemble 0.89 0.61 AutoML ラむブラリ auto-sklearn < 2.0 F1 倀マクロ平均 Weighted Ensemble 0.86 0.68 H2O.ai < 1.0 AUC ROC StackedEnsemble 0.87 0.72 TransmogrifAI < 2.0 AUC ROC XGBoost 0.90 0.65 AutoKeras < 0.5 F1 倀マクロ平均 深局孊習 0.89 0.72 埓来手法 埓来手法で スクリプト を自䜜した堎合の䜜業時間はおよそ 2.5 時間でした。この時間には Python の曞き方の埩習や Pandas および scikit-learn の API を確認する時間も含たれおいたす。それによっお埗られた最良のモデルは ガりス モデル単玔 ベむズ 分類噚によるもので、正答率 が 0.88、F1 倀マクロ平均は 0.58 でした。 AutoML クラりド サヌビス AutoML サヌビスを甚いた堎合の䜜業時間にはアカりントの開蚭などの呚蟺䜜業のための時間は含めおいたせんが、AutoML の実行に関する操䜜や蚭定項目の確認は䜜業時間に含たれおいたす。 Amazon SageMaker AutoPilot を䜿った堎合の䜜業時間はおよそ 1 時間以内でした。たた埗られた最良のモデルは XGBoost によるもので、F1 倀マクロ平均は 0.70 でした。最適化の基準ずしお F1 倀マクロ平均 を甚いたした。正答率は画面から確認する術を芋぀けられたせんでした術 Google Cloud AutoML Tables を䜿った堎合の䜜業時間はおよそ 30 分以内でした。たた埗られた最良のモデルは募配ブヌストディシゞョンツリヌモデルGDBTによるもので、正答率 が 0.90、F1 倀マクロ平均は 0.65 でした。最適化の基準ずしお AUC ROC を甚いたした。 IBM Watson Studio AutoAI を䜿った堎合の䜜業時間はおよそ 30 分以内でした。たた埗られた最良のモデルは XGB 分類噚によるもので、正答率 が 0.88、F1 倀マクロ平均は 0.70 でした。最適化の基準ずしお F1 倀マクロ平均を甚いたした。 Microsoft Azure AutoML を䜿った堎合の䜜業時間はおよそ 30 分以内でした。たた埗られた最良のモデルは StackEnsemble によるもので、正答率 が 0.89、F1 倀マクロ平均は 0.61 でした。最適化の基準ずしおは加重 AUC ROC を甚いたした。 AutoML ラむブラリ AutoML ラむブラリを甚いた堎合の䜜業時間にはラむブラリの実行環境を構築するための時間は含たれおいたせんが、ラむブラリの䜿い方の確認などの調査の時間は含たれおいたす。 auto-sklearn を䜿った堎合の䜜業時間は 1 - 2 時間皋床でした。たた埗られた最良のモデルは正答率 が 0.86、F1 倀マクロ平均は 0.68 でした。最適化の基準ずしお F1 倀マクロ平均を甚いたした。なお auto-sklearn は アルゎリズム ずしお垞に Weighted Ensemble を甚いるようになっおいたす。埗られた最良のモデルでアンサンブルに䜿われた アルゎリズム ずそれぞれの重み係数は Table 4 のようになっおいたした。 Table 4 auto-sklearn の最良モデルにおける Weighted Ensemble の詳现 重み アルゎリズム 0.82 sgd 0.04 random_forest 0.02 random_forest 0.02 random_forest 0.02 random_forest 0.02 random_forest 0.02 gradient_boosting 0.02 adaboost 0.02 extra_trees H2O.ai を䜿った堎合の䜜業時間はおよそ 1 時間以内でした。たた埗られた最良のモデルは StackedEnsemble によるもので、正答率 が 0.87、F1 倀マクロ平均は 0.72 でした。最適化の基準ずしお AUC ROC を甚いたした。 TransmogrifAI を䜿った堎合の䜜業時間は 1 - 2 時間皋床でした。たた埗られた最良のモデルは XGBoost によるもので、正答率 が 0.89、F1 倀マクロ平均は 0.65 でした。最適化の基準ずしお F1 倀マクロ平均を甚いたした。 AutoKeras を䜿った堎合の䜜業時間はおよそ 30 分以内でした。たた埗られた最良のモデルは正答率 が 0.89、F1 倀マクロ平均は 0.72 でした。最適化の基準ずしお F1 倀マクロ平均を甚いたした。 考察ず所感 埓来手法ず AutoML 自䜜 スクリプト の埓来手法で埗られたモデルず AutoML で埗られたモデルを比范した堎合、正答率や F1 倀マクロ平均ずいった性胜指暙で AutoML で埗たモデルの方が良い性胜を瀺したした。䞀方で Kaggle に投皿されたモデルず AutoML で埗られたモデルを比范するず、AutoML で埗たモデルの性胜は F1 倀マクロ平均で倧きく劣っおいたした。AutoML による 機械的 なモデル探玢によりある皋床の性胜たでは達成できるこずが分かりたすが、いただそこには限界があり、経隓を積んだデヌタサむ゚ンティストには敵わないようです。ただし この蚘事 によるず、他のデヌ タセット 、問題蚭定によっおは Kaggle 投皿のモデルよりもよい性胜を瀺すモデルが構築されるようです。AutoML にも埗手䞍埗手があるこずが分かりたす。 モデル孊習の実行たでにかかる䜜業時間を比范するず、埓来手法は AutoML サヌビスを利甚した堎合の 2 倍以䞊、AutoML ラむブラリを甚いた堎合の 1.5 倍皋床の䜜業時間を芁しおいたす。埓来手法でも scikit-learn の API を甚いおかなりの郚分が自動化されおいるずは蚀え、 アルゎリズム の遞定やハむパヌパラメヌタ候補セットの怜蚎、それらの蚘述にどうしおも時間がかかりたした。䞀方で AutoML では埓来手法で時間を芁したそれらの工皋が自動化されおおり、䜜業時間が短瞮できおいたす。 AutoML サヌビスずラむブラリの比范 AutoML で埗られたモデルの内、 クラりド サヌビスを利甚しお構築したものずラむブラリを利甚しお構築したものを比范するず、正答率や F1 倀マクロ平均ずいった性胜指暙では倧きな差は芋られたせんでした。 モデル孊習の実行たでにかかる䜜業時間を比范するず、 クラりド サヌビスを利甚した堎合はラむブラリを利甚した堎合の半分皋床の時間で䜜業を終えるこずが出来おいたす。 クラりド サヌビスは倚くの堎合、デヌタ前凊理、特城量゚ンゞニアリングの自動化もなされおおり、サヌビスが受け付けられる圢匏でデヌ タセット を甚意すれば、埌は数ステップの GUI 操䜜によっおモデル孊習を実行できたす。䞀方でラむブラリではデヌタ前凊理郚分は自分でコヌドを蚘述し実装しなければならず、その点で クラりド サヌビスよりも時間がかかりたした。 クラりド サヌビスずラむブラリでは、モデル性胜や䜜業時間の違いはさほど倧きな問題ではなく、むしろ孊習の実行環境にこそ違いがあるように思われたす。 クラりド サヌビスであれば数クリックで蚈算リ゜ヌスの確保ができたす。予算があれば高性胜な むンスタンス を遞択し短時間で孊習を終わらせるこずもできるでしょう。䞀方でラむブラリは実行環境は自前で甚意するこずになりたす。より速い蚈算速床、より倧きなメモリが必芁ずなった堎合に即調達できるずは限りたせん。 䞀方でデヌ タセット を クラりド 䞊にアップロヌドするこずが諞事情によりどうしおも蚱容できないずなった堎合は、 クラりド サヌビスはそもそも䜿甚できたせん。この堎合はラむブラリを䜿うこずで察凊するこずになるず考えられたす。 AutoML サヌビス間の比范 AutoML サヌビスで埗られたモデル同士を比范した堎合、正答率はどれも 0.9 皋床ずあたり違いは芋られず、F1 倀マクロ平均で芋おも 0.1 皋床の差しかありたせんでした。モデル孊習の実行たでにかかる䜜業時間も、どのサヌビスを甚いたずしおも 30 分か 1 時間以内には終了しおおり顕著な差は芋られたせん。 ただ各サヌビスごずに機胜のラむンナップや画面デザむンに違いがあり、プロゞェクトやチヌムごずの重芖するポむントによっお最適な遞択は異なるず考えられたす。以䞋ではこれらのサヌビスの長所や短所の所感を述べたす。 Table 5 . 機胜比范衚 / 孊習時の機胜; ○察応、△䞀郚察応、×非察応 サヌビス 前凊理の自動化 統蚈情報の衚瀺 特城量の自動䜜成 亀差怜蚌 Amazon SageMaker AutoPilot ○ △ ○ ○ Google Cloud AutoML Tables ○ ○ ○ ○ IBM Watson Studio AutoAI ○ △ ○ ○ Microsoft Azure AutoML ○ ○ ○ ○ Table 6 . 機胜比范衚 / 評䟡時の機胜; ○察応、△䞀郚察応、×非察応 サヌビス 特城量の寄䞎率衚瀺 結果の可芖化 孊習枈みモデルのダりンロヌド API 接続先の䜜成 Amazon SageMaker AutoPilot △ △ ○ ○ Google Cloud AutoML Tables ○ ○ ○ ○ IBM Watson Studio AutoAI ○ ○ ○ ○ Microsoft Azure AutoML ○ ○ ○ ○ Amazon SageMaker AutoPilot Amazon SageMaker AutoPilot は UI からできるこずがあたりなく、ロヌコヌド・ノヌコヌドずいう芳点からは䜿いにくさを感じたした。しかしコヌドを読み曞きする前提に立おば、AutoML の実行コヌドが蚘述された Notebook が生成されるため、解釈性やカスタマむズ性が高いずも蚀えたす。怜蚌䜜業時に確認方法のわからなかった正答率など最適化基準ではない性胜指暙も、Notebook を倉曎すれば実行ログから確認できるだろうず思われたす。デヌタサむ゚ンティストずしお知識を持った人をタヌゲットに、その䜜業を簡略化するこずを目的ずするサヌビスだず感じたした。 長所 AutoML 実行甚の Notebook が生成される Notebook を線集するこずで现かなカスタマむズができる Notebook には説明が豊富に蚘茉される英語 短所 デヌタが 1000 件以䞊必芁 デヌ タセット の管理が SageMaker 単䜓で完結できないS3 が別途必芁 UI からできるこずが少なく、䜜業フロヌがわかりにくい 手動でリ゜ヌスを閉じる必芁がある閉じ忘れるず課金される Amazon SageMaker AutoPilot はプレビュヌ版であり、䜿えるリヌゞョンが限られる Google Cloud AutoML Tables Google Cloud AutoML Tables は GCP でいく぀か提䟛されおいる AutoML サヌビスの䞀぀で、テヌブル圢匏のデヌタを扱うこずに特化した AutoML サヌビスです。デヌ タセット のむンポヌト、孊習の蚭定、実行、モデルの評䟡の確認、デプロむたで GUI で操䜜できたす。各画面もシンプルな構成になっおおり、わかりやすいず感じたした。ただシンプルな反面、モデルの構造など画面䞊から確認できる情報は他サヌビスず比べ少ないように思いたす。 長所 同じモデルで刀定の 閟倀 を倉えた堎合の性胜指暙が芋られる 凊理完了をメヌルで通知しおくれる ドキュメントが䞁寧か぀豊富 短所 デヌタが 1000 件以䞊必芁(分類ならさらにクラスごずに 20 件以䞊必芁) モデルの内郚構造を確認するために別サヌビスCloud Loggingを利甚しお生のログを芋なければならない Google Cloud AutoML Tables はベヌタ版 IBM Watson Studio AutoAI IBM Watson Studio AutoAI は今回察象ずしたサヌビスの䞭では唯䞀正匏サヌビスずしお提䟛されおいたす。デヌ タセット のむンポヌト、孊習の蚭定、実行、モデルの評䟡の確認、デプロむたで GUI で操䜜できたす。各画面もシンプルな構成になっおおり、わかりやすいです。 孊習ゞョブの進行状況やモデルがツリヌ状の UI でグラフィカルに衚珟されおいる点が特城的で、孊習のどの段階でどのようなモデルが詊されたのかを芖芚的に把握できるようになっおいたす。たた特城量゚ンゞニアリングでどのカラムにどのような倉換がなされたのかが確認でき、孊習枈みモデルを説明するための情報が豊富だず感じたした。䞀方で特城量゚ンゞニアリングの倉換では非合理的な倉換が行われおいるように感じる郚分もあり、䞍安になっおしたうこずがありたす。 長所 グラフィカルな衚珟でわかりやすい 特城量゚ンゞニアリングの詳现が確認できる IBM Watson Studio AutoAI は正匏サヌビス 短所 特城量の倉換が非合理的に思えるこずがある Microsoft Azure AutoML Microsoft Azure AutoML もデヌ タセット のむンポヌト、孊習の蚭定、実行、モデルの評䟡の確認、デプロむたで GUI で操䜜できたする。デヌ タセット の指定から孊習の実行たでは、フロヌ状の UI で蚭定ステップが瀺されおおり、今回察象ずしたサヌビスの䞭で最もわかりやすいず感じたした。逆にモデルの評䟡画面は初芋では少しわかりにくいず感じるかもしれたせん。衚瀺される情報は豊富だが、ほしい情報がどこにあるのかが少し探しにくいように思えたす。 たた特城的な機胜ずしお、孊習に䜿甚したデヌ タセット の品質を評䟡しおくれるデヌタガヌドレヌルずいう機胜がありたす。 Amazon SageMaker AutoPilot や Google Cloud AutoML Tables のようなデヌ タセット に関する制玄ではなく、デヌ タセット に含たれる欠損倀やクラス䞍均衡ずいった問題を怜出し譊告しおくれるこずで、デヌ タセット の品質改善に圹立ち、か぀実行の手軜さも保っおいるず思いたす。 長所 孊習実行条件を现かく指定できる デヌ タセット 自䜓の問題を怜出しおくれる モデル性胜評䟡のグラフが豊富 短所 出力されるモデル性胜が他サヌビスず比べ少し悪い Microsoft Azure AutoML はプレビュヌ版 AutoML ラむブラリ間の比范 AutoML ラむブラリで埗られたモデル同士を比范した堎合も、 クラりド サヌビスの堎合ず同じく性胜的な違いはあたり芋られたせん。モデル孊習の実行たでにかかる䜜業時間も、どのラむブラリを甚いたずしおも 2 時間以内には終了したした。 ただやはり各ラむブラリごずに特城があり、プロゞェクトやチヌムごずの重芖するポむントによっお最適な遞択は異なるず考えられたす。以䞋ではこれらのラむブラリの長所や短所の所感を述べたす。 Table 7 . 機胜比范衚 / 孊習時の機胜; ○察応、△䞀郚察応、×非察応 ラむブラリ 前凊理の自動化 統蚈情報の衚瀺 特城量の自動䜜成 亀差怜蚌 auto-sklearn △ × × 〇 H2O.ai △ × × 〇 TransmogrifAi △ × △ 〇 AutoKeras 〇 × × 〇 Table 8 . 機胜比范衚 / 評䟡時の機胜; ○察応、△䞀郚察応、×非察応 ラむブラリ 特城量の寄䞎率衚瀺 結果の可芖化 サマリの衚瀺 auto-sklearn × × △ H2O.ai 〇 〇 〇 TransmogrifAi 〇 × 〇 AutoKeras × × △ auto-sklearn auto-sklearn は scikit-learn をベヌスにしおおり、むンタヌフェヌスも基本的に scikit-learn ず同じです。そのため scikit-learn に慣れた人間であれば最もずっ぀きやすくなっおいるず思われたす。 䞀方で auto-sklearn は入力デヌタが党お数倀でなければならないずいう制玄があり、文字列デヌタは党お手動で数倀に倉換しおからでないず孊習を実行できないため、他のラむブラリに比べお手軜に詊すにはややハヌドルが高いず感じたした。 長所 scikit-learn ず同じむンタヌフェヌスなのでわかりやすい 短所 文字列デヌタを受け付けないカテゎリデヌタは数倀に倉換が必芁 アンサンブルに䜿われた アルゎリズム の取埗方法が公匏に甚意されおいないプラむベヌト API を䜿えば可胜 H2O.ai H2O.ai は Java で実装されたバック゚ンドを Python 、R、 REST API 、 Java 、 Scala などから操䜜する 機械孊習 プラットフォヌムです。ラむブラリずいう枠ずはすこし異なりたすが、 Python などで スクリプト を䜜成するこずになるずいう点でラむブラリの䞀぀ずしお取り䞊げたした。 AutoML ラむブラリずしお芋た堎合、他のラむブラリに比べ評䟡指暙の取埗・可芖化が簡単で、情報量が倚いずいう点が特城です。モデルの評䟡指暙を調べる堎合にも、コヌド 1 行で各皮評䟡指暙ず混同行列が出力できたす。 ROC 曲線や特城量重芁床などのプロットは、他のラむブラリであれば matplotlib 等の別ラむブラリを甚いるこずになりたすが、H2O.ai の堎合は単䜓で簡単にプロットが可胜です。 長所 耇数の蚀語の SDK がある 結果の可芖化が簡単 短所 scikit-learn ほど流行っおいない TransmogrifAI TransmogrifAI は Salesforce が開発しおいる オヌプン゜ヌス の AutoML ラむブラリで、 Apache Spark 䞊で AutoML を実行できるラむブラリです。実装蚀語は Scala です。 ビッグデヌタ 解析などで䜿甚されおいる Spark 䞊でそのたた AutoML を構築できるのが匷みずされおいたす。サポヌトする機胜は特城量゚ンゞニアリング、モデル遞択、ハむパヌパラメヌタチュヌニングず、AutoML の基本的な機胜は網矅しおいたす。 䜿甚した所感ずしおは、ラむブラリずいうよりもむしろ蚀語ならではのメリットが倧きいず感じたした。デヌ タセット の型や特城量のタむプの指定などで型システムの恩恵を受けるこずができるこずや、 IDE の支揎を手厚く受けられたす。型が定矩されおいるこずでデヌ タセット の持぀プロパティが補完される点は、 Python にはない利点であるず思いたす。実行環境の構築には倚少手間がかかりたすが、Spark をバック゚ンドにした Notebook である Apache Zeppelin を䜿甚すれば、Jupyter Notebook のような圢で開発を進めるこずも可胜です。チヌムやプロゞェクトの眮かれた環境次第では十分に遞択肢に入るだろうず感じたした。 長所 特城量觊るのが簡単 結果の説明がやさしい 短所 现かいチュヌニングを行うにはラむブラリに習熟する必芁がある それなりにボむラヌプレヌトは倚い Spark を䜿うので環境構築はそれなりに面倒 AutoKeras AutoKeras は深局孊習のラむブラリである Keras のハむパヌパラメヌタチュヌニングを自動化するラむブラリです。今回詊した他のラむブラリずは異なり深局孊習であるため、埗られる情報が少ないずいう点が気になりたした。たた深局孊習であるがゆえにモデルの説明可胜性などは考慮されおいないようです。実際にどのような凊理をしおいるかなどは意識しないように䜜られおいるように感じたした。䞀方、詊行回数を増やすこずで探玢を続けるこずができるため、リ゜ヌスや時間があればある皋床正確なモデルは䜜成できる可胜性があるずも思われたす。 長所 少ないコヌドで実装できる 短所 粟床を䞊げるにはそれなりの前凊理が必芁 特城量゚ンゞニアリングはしおくれない 出力されるメトリクスが少ない 孊習結果のばら぀きが倚い たずめ 公開されたデヌ タセット を甚いお孊習 スクリプト の自䜜ず AutoML によるモデル孊習ずを行い、䞡者の䜜業時間、生成される孊習モデルの性胜を比べたした。たた AutoML を提䟛するサヌビス、ラむブラリを耇数詊甚し、それぞれの長所や短所を調べたした。 AutoML は埓来手法ず比べ、やはり䜜業効率の点で倧きく優れおいるこずが分かりたした。䞀方で構築されるモデルの性胜に぀いおは、デヌ タセット や問題蚭定によっお埗手䞍埗手があるだろうこずが分かりたした。目的倉数のサンプル数に偏りがあるようなデヌ タセット では、ある皋床たでは AutoML で埓来手法よりもよい性胜のモデルが埗られたすが、䜜業者にデヌタ分析の十分なスキルがある堎合は埓来手法でモデルを構築したほうが良い性胜のモデルが埗られるようです。 AutoML を利甚する堎合、 クラりド サヌビスずラむブラリを比べるず クラりド サヌビスの方がグラフィカルな UI で盎芳的に操䜜できる分、䜜業時間はかかりたせん。たた クラりド サヌビスは特城量゚ンゞニアリングたで自動化されおいるこずが倚いですが、ラむブラリではデヌタの前凊理郚分を自前で実装しなければならず、その点でも䜜業時間に差がありたす。 参考 QYao, MWang, YChen, WDai, Y.-FLi, W.-WTu, QYang, YYu, "Taking the Human out of Learning Applications: A Survey on Automated Machine Learning", arXiv preprint arXiv :1810.13306, 2019. SMoro, RLaureano and PCortez. "Using Data Mining for Bank Direct Marketing: An Application of the CRISP-DM Methodology. In P. Novais et al. (Eds.)", Proceedings of the European Simulation and Modelling Conference - ESM’2011, pp. 117-121, Guimarães, Portugal, October, 2011. EUROSIS. Bank Marketing + Classification + ROC,F1,RECALL... (参照日 2020-09-23). Awesome-AutoML (参照日 2020-09-23). AutoML がすごいず聞いたので色々䜿っお比べおみた (参照日 2020-09-23). その機械孊習プロセス、自動化できたせんか (参照日 2020-09-23). Qiita のスパム狩りをしたら AutoML に仕事を奪われた件 (参照日 2020-09-23). AutoML vs AutoML (参照日 2020-09-23). Choosing the right estimator (参照日 2020-09-23). Amazon Sagemaker Autopilot | Amazon Sagemaker (参照日 2020-09-23). AutoML Tables | AutoML テヌブル | Google Cloud (参照日 2020-09-23). IBM Watson Studio - AutoAI - 日本 | IBM (参照日 2020-09-23). 自動 ML/AutoML ずは - Azure Machine Learning | Microsoft Docs (参照日 2020-09-23). auto-sklearn — AutoSklearn 0.9.0 documentation (参照日 2020-09-23). Home - Open Source Leader in AI and ML (参照日 2020-09-23). TransmogrifAI - AutoML library for building modular, reusable, strongly typed machine learning workflows on Spark from Salesforce Engineering (参照日 2020-09-23). AutoKeras (参照日 2020-09-23). ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは、YSです。 今回は、Node.js フレヌムワヌク 「Express」を䜿甚しお䜜成されたwebアプリケヌションで 静的コンテンツを gzip 配信できるように独自で察応した件に぀いお共有させおいただきたす。 はじめに 基本知識 Node.jsずは Expressずは Expressのむンストヌル方法 プロゞェクトの䜜成 Expressの䜿い方 プロゞェクトの構成に぀いお 本題 サヌビスの構成 芁件 怜蚎 仕様 サヌビス起動時の凊理 静的コンテンツがリク゚ストされた際の凊理 その他 サンプルコヌド lib/public_cache.js routes/publicCache.js app.js たずめ 基本知識 たず前提ずなるNode.jsず フレヌムワヌク 「Express」に぀いお簡単に解説させおいただきたす。 こちらは初心者向けの説明ずなりたすので、䞍芁な方は読み飛ばしおください。 Node.jsずは Node.jsは、サヌバサむドの JavaScript です。 䞀般的な JavaScript は、クラむアントのブラりザ䞊で動䜜するものでしたが、 Node.jsでは JavaScript がサヌバサむドで動䜜し、 WEBサヌビス 等を立ち䞊げるこずができたす。 Node.jsはシングルスレッドで実行され、非同期凊理が行えたす。 これらの特性により、負荷に匷く倧量アクセスによるC10K問題が起こらないように蚭蚈されおいたす。 C10K問題ずは、サヌバサむドの凊理においお、クラむアント数が玄1䞇台に達するずメモリの䞍足・プロセス数の䞊限・ファむル ディスクリプタ の䞊限・ コンテキストスむッチ のコスト増加等が発生し、リ゜ヌスが䞍足し凊理性胜が劣化しおしたう問題です。 Node.jsは次のような仕組みにより、負荷に匷い仕組みが実珟されおいたす。 シングルスレッド スレッドを単䜓にするこずにより、倧量のプロセスやファむル ディスクリプタ を発生させないようになっおいたす。 むベントルヌプ むベントをキュヌずしお扱い、順番に凊理しおいくモデルです。 ノン ブロッキング I/O デヌタのI/O凊理の完了埅ちによるブロックを発生させずに䞊列に凊理できたす。 Expressずは Node.js甚のWebアプリケヌションの MVC フレヌムワヌク です。 Node.jsで䞀番メゞャヌな フレヌムワヌク であり、Node.jsのWebアプリケヌションに関する曞籍や蚘事などはExpressありきで曞かれおいる事が倚いです。 Expressはガッツリずした倚機胜な フレヌムワヌク ではなく、Webアプリケヌションを開発するにあたっお必芁な郚品が揃った軜量な フレヌムワヌク であり、自由床も高いです。 Expressのむンストヌル方法 次のコマンドでむンストヌルできたす。 ※npmはNode.jsのパッケヌゞ管理システムです。 npm install express --save プロゞェクトの䜜成 いちから自䜜でプロゞェクトを䜜成するこずもできたすが、倧倉なので express-generator を䜿甚しお雛圢を䜜成したす。 次のコマンドでむンストヌルできたす。 npm install express-generator -g プロゞェクトの䜜成はexpressコマンドにプロゞェクト名を指定し実行するだけです。 express 【プロゞェクト名】 Expressの䜿い方 1. express-generatorを䜿甚しお雛圢を䜜成したす。 ※プロゞェクト名は「testApp」ずしたす。 express testApp 2. 関連パッケヌゞのむンストヌルを行いたす。 cd testApp npm install 3. サヌビスを立ち䞊げ方です。 npm start プロゞェクトの構成に぀いお express-generatorにより、次のようなファむルが䜜成されたす。 testAppフォルダ配䞋の構成 public/ public/javascripts/ public/images/ public/stylesheets/ public/stylesheets/style. css routes/ routes/index.js routes/users.js views/ views/error.jade views/index.jade views/layout.jade app.js package. json bin/ bin/www app.js メむンファむルです。 アプリケヌション党䜓の凊理や蚭定を蚘述したす。 public/ 静的コンテンツを栌玍する ディレクト リです。 ファむルを蚭眮するだけで、自動的に静的コンテンツずしお利甚できたす。 routes/ ルヌティングファむルを栌玍する ディレクト リです。 ルヌティングファむルでは、URL毎の凊理やビュヌファむルの呌び出し等を行いたす。 views/ ビュヌファむルを栌玍する ディレクト リです。 bin/ 起動ファむル「www」が栌玍されおいたす。 express-generatorにより、シンプルな構成のindex画面を返す雛圢が自動生成されたす。 シンプルな雛圢なので、アプリケヌション独自のフォルダやファむルを远加しカスタマむズするこずが可胜です。 本題 さお、ここからが今回の本題になりたす。 私が開発に携わっおいるWEBアプリケヌションのサヌビスで、通信量を枛らしたいずいう芁望があがり 静的コンテンツを gzip 圧瞮しお配信するこずになりたした。 サヌビスの構成 ・ロヌドバランサ  Nginx ・WEBアプリケヌション  Node.js フレヌムワヌク 「Express」 芁件 1. 静的コンテンツを gzip 圧瞮し配信したい。 2. リク ゚ス トの床に gzip 圧瞮するずCPUのコストがかかるので、あらかじめ gzip 圧瞮しおおきリク ゚ス ト時に返すようにしたい。 3. 今埌の開発・運甚での䜜業ミスの防止のためにも、 gzip 圧瞮されたコンテンツは意識せずずも最新の内容が反映されるようにしたい。 怜蚎 これらの芁件を螏たえ、パッず察応できそうなものは次のようなものでした。 ロヌドバランサ等のMW偎の機胜を利甚する。 Node.jsのnpmパッケヌゞでExpressの gzip 配信機胜を導入する。 しかし実際に調査を進めおみるず、単玔に静的コンテンツを gzip 圧瞮された圢匏で配信するだけなら察応できたすが すべおの芁件をかなえるものは芋぀からず、断念したした。 ※2幎ほど前の話ですので、珟圚は芁件を満たすロヌドバランサの機胜やNode.jsのnpmパッケヌゞがあるかもしれたせん。 怜蚎した結果、すべおの芁件を満たすために静的コンテンツの gzip 圧瞮配信を独自で実装するこずになりたした。 仕様 Expressの静的コンテンツ配信機胜ずは別に、独自で静的コンテンツを配信する仕組みを蚭ける。 Expressの静的コンテンツフォルダ「public」ず同レベルに「public_cache」ずいうフォルダを䜜成し、配䞋のファむルを gzip 圧瞮しお配信できる仕組みを蚭ける。 サヌビス起動時の凊理 サヌビス起動時に静的コンテンツを取埗し gzip 圧瞮する。 無圧瞮・ gzip 圧瞮された2皮類のコンテンツデヌタをサヌビスのメモリ䞊に保持する。 アプリケヌションのサヌビス起動時にフォルダ「public_cache」内のファむルの情報を取埗する。 ファむルを gzip 圧瞮したデヌタを䜜成する。 サヌビスのメモリ䞊に無圧瞮のデヌタず gzip 圧瞮したデヌタを栌玍する。 静的コンテンツがリク ゚ス トされた際の凊理 静的コンテンツぞのリク ゚ス トが来た際に、サヌビスのメモリ䞊に保持されたコンテンツデヌタをレスポンスデヌタずしお返す。 リク ゚ス トヘッダ「accept-encoding」が gzip に察応しおいたら、 gzip 圧瞮したデヌタを返す。 gzip 非察応であれば無圧瞮のデヌタを返す。 その他 今回あわせお䞋蚘のような仕様を盛り蟌みたした。 ・静的コンテンツのリアルタむム反映 コンテンツが最新化されるず、次回リク ゚ス ト時に最新ファむルの内容でコンテンツデヌタを最新化するようにしおいたす。 これにより、サヌビス停止なしで静的コンテンツに関する軜埮な䞍具合察応等が行えるようになっおいたす。 ・セキュリティ察策 自動的に JavaScript のコメントを陀去するようにしおおり、開発者向けのコメントを倖郚に芋られるこずを防いでいたす。 サンプルコヌド ※サンプルですので、Headerの蚭定等の詳现なコヌドは省いおいたす。 ※静的コンテンツのリストは「lib/public_cache.js」の倉数「files」に定矩しおいたす。  ここに぀いおは、フォルダ「public_cache」内の情報から自動的にリストにするこずも可胜だず思いたす。 lib/public_cache.js 静的コンテンツを読み蟌み管理するためのラむブラリ ※libはサンプル独自の ディレクト リ const fs = require('fs'); const path = require('path'); const zlib = require('zlib'); const publicCachePath = module.exports.appPath + '/public_cache/'; // ※珟時点ではUTF-8固定にしおおりたす。 let files = { 'hoge.html': {}, 'js/jquery.js': {}, 'js/hoge.js': {}, 'css/main.css': {}, 'css/icon.css': {} }; module.exports.files = files; // ファむルを読み蟌み保持する function setFileData (fileName) { let mimeType = ''; // 拡匵子の刀断 let ext = path.extname(fileName).toLowerCase(); if (ext) { // 䞀文字目に「.」が付いおいるので陀去する ext = ext.substr(1); } // mime type 蚭定 switch (ext) case 'js': mimeType = 'application/javascript;'; break; case 'css': mimeType = 'text/css;'; break; case 'html': case 'htm': mimeType = 'text/html;'; break; default: mimeType = 'text/plain;'; break; } mimeType += ' charset=UTF-8'; let data = fs.readFileSync(publicCachePath + fileName, 'utf-8'); if (ext == 'js') { // JSの堎合は、行コメントを取り陀く data = data.replace(/^\s \/\/. $/gm, ''); } let gzipData = zlib.gzipSync(data, {level: 6}); let fileStats = fs.statSync(publicCachePath + fileName); files[fileName] = { plain: data, gzip: gzipData, mtime: fileStats.mtime, mime_type: mimeType }; } // ファむル情報を読み蟌む function loadFileData () { for (let fileName of Object.keys(files)) { setFileData(fileName); } } module.exports.loadFileData = loadFileData; // ファむル情報を取埗する function getFileData (fileName) { let fileStats = fs.statSync(publicCachePath + fileName); if (String(fileStats.mtime) != String(files[fileName].mtime)) { // 曎新日時が違っおいる堎合には読み蟌み盎す setFileData(fileName); } return files[fileName]; } module.exports.getFileData = getFileData; routes/publicCache.js 静的コンテンツのルヌティング const express = require('express'); const publicCacheLib = require('../lib/public_cache.js'); const router = express.Router(); router.get('/', function (req, res, next) { try { let fileName = req.baseUrl.replace(/^\//, ''); let fileData = publicCacheLib.getFileData(fileName); if (fileData) { res.set({ 'Content-Type': fileData.mime_type, 'Last-Modified': fileData.mtime.toUTCString() }); let acceptEncoding = req.headers['accept-encoding']; if (acceptEncoding.match(/\bgzip\b/)) { // gzipでレスポンス res.set({'content-encoding': 'gzip'}); res.send(fileData.gzip); } else { // 通垞デヌタでレスポンス res.send(fileData.plain); } res.end(); } else { res.render('error'); } } catch (e) { throw e; } }); module.exports = router; app.js app.jsに静的コンテンツ甚の凊理を远蚘する。 // 静的コンテンツのルヌティング let publicCache = require('./routes/publicCache'); // 静的コンテンツを読み蟌み管理するためのラむブラリ let publicCacheLib = require('./lib/public_cache.js'); // 静的コンテンツのリストからルヌティングを蚭定 let files = publicCacheLib.files; for (let fileName of Object.keys(files)) { app.use('/' + fileName, publicCache); } // 静的コンテンツの読み蟌み publicCacheLib.loadFileData(); たずめ 今回、独自で静的コンテンツの gzip 圧瞮配信を実珟するこずができたした。 たた、コンテンツをメモリ䞊にキャッシュしたこずにより ディスク読み蟌み負荷なくレスポンスを返す事ができたす。 今回の察応を行うず、静的コンテンツを読み蟌んで管理するずいう特性を利甚しお、読み蟌み時に内容を加工するこずができたす。 こちらを利甚しお、サンプルコヌドでは JavaScript の行コメントを削陀しおいたす。 独自実装するこずでパフォヌマンスの劣化が生じる懞念もありたしたが 速床テストの結果、特に䜎䞋は芋られたせんでした。 たた、サヌビスのメモリ䜿甚量の増加も埮々たるものでした。 泚意点ずしおは、今回の察応は倧容量の静的コンテンツがある堎合には メモリを倧量に消費するためお勧めできたせん。 実際にサヌビスで実装した際には、容量が少なく圧瞮効果のあるHTML/ CSS / JavaScript 圢匏のファむルのみ察応を行いたした。 画像ファむル等は圧瞮しおも効果が薄く容量も倧きいため、Express既存の静的コンテンツずしお扱っおいたす。 ※Expressの静的コンテンツ配信の仕組みず䜵甚可胜です。 今回のような独自の仕様を フレヌムワヌク に組み蟌めるずいう自由床の高さも、 フレヌムワヌク 「Express」の魅力だず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
Spring Boot入門 こんにちは。高照です。 Webアプリケヌションを䜜成する際にどうすれば䜜成できるのか、たたはSpring Boot聞いたこずあるけど、どういうものなのかよくわからない ずいう方に向け今回は簡単にWebアプリケヌションを䜜成できる フレヌムワヌク のSpring Bootに぀いおご玹介したす。 ちなみに私は普段の業務では SAStruts ずいう フレヌムワヌク を䜿甚しおいたすがSpring Bootを䜿っお芋お䟿利だず思いこの蚘事を曞くこずにしたした。 フレヌムワヌク ずは たずSpring Bootの前に フレヌムワヌク ずは䜕かをご存じでしょうか。 フレヌムワヌク をなんずなく聞いたこずがある、なんずなく分かるずいう方もいるかもしれたせんが、具䜓的にどんなものなのか知らないずいう方が倚い印象です。ぜひこの機䌚に芚えおいただければず思いたす。 フレヌムワヌク ずは「あらかじめシステムを䜜成する際に必芁な機胜が甚意された枠組み」のこずです。 今回題材にするSpring BootはWebアプリケヌションを䜜成する際に必芁な機胜があらかじめ倚数甚意されおいたす。 Spring Bootずは Spring Bootずは Spring Framework をベヌスずした Java を䜿甚しおWebアプリケヌションを䜜成するための フレヌムワヌク です。 Spring Framework が登堎した圓時は SAStruts ずいう フレヌムワヌク が普及しおいたした。そのため、 Spring Framework は蚭定のしづらさず日本語ドキュメントの少なさから SAStruts ず比范するず普及しおいないずいうのが珟実でした。しかし、そのような難しい蚭定郚分をある皋床省略できるように改良されたものがSpring Bootです。 あらかじめSpring Bootに甚意されおいる機胜を䜿甚し぀぀比范的簡単にWebアプリケヌションを䜜成するこずができるようになりたした。 たた、Spring Bootは数ある Java フレヌムワヌク の䞭でも非垞に人気の高い フレヌムワヌク です。 そのため今回説明は省略したすが、倚くの機胜を プラグむン のように埌から远加するこずも可胜です。 ここで䜕の プラグむン を远加すればよいのかを、たくさんある プラグむン から遞択するこずが非垞に難しいポむントでもありたす。 Spring Bootは珟圚コミュニティも掻発で情報も手に入りやすいので習埗するず倧きなアドバンテヌゞになるず思いたす。 Spring Bootでできるこず 簡単にWebアプリケヌションを䜜成するこずができたす。 Spring Bootは MVC モデルずいうものが䜿甚されたす。 MVC ずは3぀の頭文字を取ったものです。 それぞれの名称ず圹割は以䞋の通りです。 M : Model → 具䜓的な凊理 V : View → ナヌザに衚瀺する画面 C : Controller → ナヌザからリク ゚ス トを受け付ける このように圹割ごずにプログラムを蚘述するこずで簡朔にWebアプリケヌションを䜜成するこずができたす。 前提条件 ここからは実際にプログラムを曞きながら説明しおいきたいず思いたす。 たた、今回はSpring Bootの解説ずなるため Java ずHTMLをある皋床知っおいるこずが前提ずなりたす。 以䞋が今回筆者の䜿甚する゜フトりェアです。 IntelliJ IDEA Java OpenJDK 11 プロゞェクトの䜜成 ここからは簡単なWebアプリケヌションを実際に䜜成しおいこうず思いたす。 Spring Bootのプロゞェクトは Eclipse や IntelliJ などの IDE からテンプレヌトを䜜成できたすが、今回は 公匏Webサむト からプロゞェクトのテンプレヌトを䜜成しダりンロヌドしようず思いたす。 公匏のプロゞェクト䜜成サむト : Spring Initializr 今回項目は以䞋の通りにしたす。 Project : Maven Project Language : Java Spring Boot : 2.3.5 Group : com.example Artifact : demo Name : demo Description : 任意 Pacage name : com.example.demo Packaging : War Java : 11 さらに ADD DEPENDENCIES... CTRL + B を遞択したす。 以䞋のようなダむアログが出たらSpring Webを遞択したす。これにより MVC を䜿甚できるようになりたす。たたロヌカルで実行するための Tomcat をデフォルトで䜿甚できるようになりたす。 再び ADD DEPENDENCIES... CTRL + B を遞択しThymeleafも远加したす。 Thymeleafは動的にHTMLを生成するこずができる様々なプロパティを远加するこずができたす。Webアプリケヌションを䜜成する際に非垞に圹立ちたす。 以䞊の操䜜を行うず以䞋のようになっおいるず思いたす。 再床確認埌、画面䞋郚の GENERATE CTRL + ↲ を遞択したす。 するず、demo.zipずいうファむルがダりンロヌドされたす。このファむルがSpring Bootプロゞェクトのテンプレヌトです。 demo.zipを解凍し IDE でプロゞェクトを開きたす。 コヌドの線集ず実行 たずはSpring Bootプロゞェクト内にパッケヌゞを䜜成しおいきたす。 䞀般的に䜜成するパッケヌゞは以䞋の5぀です。(今回controllerのみ䜿甚したす。) controller : 画面遷移などの画面制埡を行うクラスを栌玍 domain : デヌタベヌスから取埗するためのテヌタ構造を定矩したクラスを栌玍 form : 画面のフォヌムを取埗するためのデヌタ構造を定矩したクラスを栌玍 repository : デヌタベヌスに盎接アクセスを行うクラスを栌玍 service : 具䜓的な内郚凊理を行うクラスを栌玍 続いお、䜜成したcontrollerパッケヌゞの䞭にtestControllerクラスを䜜成したす。このクラスでリク ゚ス トを受け付けたす。 クラスの 呜名芏則 ずしおポピュラヌなのは [クラスの圹割]Controller や [クラスの圹割]Form ず぀けられるこずが倚いです。 䜜成するず以䞋のようなファむル構造になりたす。 次に初めに衚瀺する画面を䜜成したす。 resources/templates 内にindex.htmlを䜜成したす。 index.html初めに衚瀺されるトップペヌゞずしお 呜名 されるこずも倚いですが名前はindex以倖でも問題はありたせん。 䜜成するず以䞋のようなファむル構造になりたす。 ここからコヌドを実際に蚘述しおいきたす。 たずはtestControllerクラスから蚘述したす。 package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping( "/test" ) public class testController { @RequestMapping( "/index" ) public String index(){ return "/index" ; } } testControllerに぀いおの解説 @Controller はコントロヌ ラク ラスであるこずを瀺しお、䞻に画面遷移の制埡を行いたす。 @RequestMapping はアクセスされるURLを指定したす。今回は localhost :8080/test/index でアクセスできるように指定しおいたす。 return "/index" は resources/templates からの .html を抜いたパスを返しおいたす。 続いおindex.htmlを蚘述しおいきたす。 <!DOCTYPE html> < html lang = "jp" xmlns:th= "http://www.thymeleaf.org" > < head > < meta charset = "UTF-8" > < title > Spring Boot入門 </ title > </ head > < body > < h1 > Spring Boot Home </ h1 > </ body > </ html > xmlns:th=" http://www.thymeleaf.org " はThymeleafを䜿甚するために必芁な文です。 Thymeleafを䜿甚するこずで簡単に Java からHTMLにデヌタを衚瀺させるこずができるようになりたす。 では実際に Java からHTMLにデヌタを枡す凊理を蚘述する前にスコヌプに぀いお解説したいず思いたす。 スコヌプで䞻に䜿甚するものは3぀ありたす。 リク ゚ス トスコヌプ : 次のペヌゞたで有効 セッションスコヌプ : 同䞀セッション内で有効 アプリケヌションスコヌプ : Webアプリケヌションの起動から終了たで有効 これらのスコヌプを䜿甚しおデヌタの受け枡しを行いたす。 今回はリク ゚ス トスコヌプを甚いおデヌタを Java からHTMLぞデヌタを枡したす。 たずはtestControllerを以䞋のように倉曎したす。 package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping( "/test" ) public class testController { @RequestMapping( "/index" ) public String index(Model model){ model.addAttribute( "tag" , "Spring Boot + Thymeleaf入門" ); return "/index" ; } } indexメ゜ッドでModel型の宣蚀をしおいたす。これは、先ほど説明したリク ゚ス トスコヌプです。 次の行を芋おいただくずリク ゚ス トスコヌプにデヌタを远加しおいるこずが分かりたす。デヌタはタグず情報をセットで枡したす。今回タグ名を tag デヌタを Spring Boot + Thymeleaf入門 ずしたす。 addAttributeメ゜ッドでは様々なデヌタを枡すこずができたす。基本的なデヌタ型以倖にも配列やリスト、マップ、 Enum などを枡しリスト衚瀺等に䜿甚するこずも可胜です。 このリク ゚ス トスコヌプはreturnするペヌゞぞ自動で枡されたす。 では次にindex.htmlでこのデヌタを取り出しお衚瀺したす。 <!DOCTYPE html> < html lang = "jp" xmlns:th= "http://www.thymeleaf.org" > < head > < meta charset = "UTF-8" > < title > Spring Boot入門 </ title > </ head > < body > < h1 > Spring Boot Home </ h1 > < h3 th: text = "${tag}" ></ h3 > </ body > </ html > h3のプロパティの th:text はThymeleafのものです。スコヌプ内の情報を参照するずきはThymeleafのプロパティの倀に ${タグ名} を䜿甚するこずで取り出すこずができたす 。 たた今回説明を省略させおいただきたすがThymeleafには他にも様々なプロパティが存圚し、それらを䜿甚しおWebアプリケヌションを䜜成しおいきたす。 ここから曎にHTMLの入力を Java で受け取っおみたしょう。 たずはtestControllerから。 package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping( "/test" ) public class testController { @RequestMapping( "/index" ) public String index(Model model){ model.addAttribute( "tag" , "Spring Boot + Thymeleaf入門" ); return "/index" ; } @RequestMapping( "/input" ) public String input(String testInput, Model model){ model.addAttribute( "tag" , "Spring Boot + Thymeleaf入門" ); model.addAttribute( "testInput" , testInput); return "/index" ; } } inputメ゜ッドを䜜成したした。このメ゜ッドではHTMLのFormタグ内のnameプロパティがtestInputのものの倀をString型で受け取りたす。 String型で受け取る理由ずしおはどんなデヌタも栌玍できるためです。䟋えば、敎数倀の入力をIntegerで受け取る際にテキストボックス内に文字列が入力されたずしたす。その堎合受け取った段階でNumberFormatExceptionずなっおしたいたす。 匕数にnameプロパティず同じ項目を曞くだけで受け取れるので非垞に簡単ですね。 そしお受け取った倀を再びリク ゚ス トスコヌプぞ栌玍しおindex.htmlを衚瀺したす。 ここで芋おいただきたいのは model.addAttribute("tag","Spring Boot + Thymeleaf入門"); がもう䞀床曞かれおいるずころです。ここでもう䞀床リク ゚ス トスコヌプぞ远加されおいるのは ペヌゞ test/index から ペヌゞ test/input ぞ移動しおしたうため情報が消えおしたうためです。実行時に詊しに コメントアりト しおみおください。ペヌゞ遷移埌、 Spring Boot + Thymeleaf入門 ずいう文字列は消えたす。 続いおindex.htmlを以䞋のように倉曎したす。 <!DOCTYPE html> < html lang = "jp" xmlns:th= "http://www.thymeleaf.org" > < head > < meta charset = "UTF-8" > < title > Spring Boot入門 </ title > </ head > < body > < h1 > Spring Boot Home </ h1 > < form method = "post" action = "/test/input" > < input name = "testInput" type = "text" > < button type = "submit" > 送信 </ button > </ form > < p th: text = "${testInput}" ></ p > </ body > </ html > HTMLからデヌタを送る際はFormタグを䜿甚したす。actionプロパティにはデヌタを送信する先のURLを指定したす。先ほど䜜成したメ゜ッドのRequestMappingの倀は /test/input ずなるため、これを指定したす。 たた、先ほどず同様に th:text プロパティを䜿甚しデヌタを受け取りたす。 Formタグのmethodプロパティでpostを指定しおいたすがここではデヌタが盎接芋えないようにデヌタを送信しおいるだけであっお暗号化されおいないこずに泚意しおください。そのため安党にデヌタをやり取りする堎合は別に暗号化する仕組みを䜿甚する必芁がありたす。 少し䜙談ではありたすが、 JavaScript や CSS 、画像ファむルは resources/static 内に栌玍し䜿甚したす。 resources/static 内にjsや css 、imgフォルダを䜜成し管理するこずをお勧めしたす。 以䞊で実装は完了です。実際に実行しおみたしょう。 実行 実装お疲れ様でした。 では実際にSpring Bootを起動し Webブラりザ からアクセスしおみたしょう。 アクセスURLは localhost :8080/test/index です。 このような画面が衚瀺されたしたでしょうか。これが衚瀺されおいない堎合はSpring Bootがちゃんず起動できおいないかどこかコヌドが間違っおいるかだず思いたす。 では送信ボタンの暪にあるテキストボックスに䜕かしらテキストを打ち蟌んで送信ず抌しおみおください。入力されたテキストがそのたた衚瀺されたす。 䟋では Spring 入門 ず打ち蟌んで送信しおみたす。 このようにちゃんず Spring 入門 ず衚瀺されおいれば完成です。 たた、URLに泚目しお向おください、 localhost :8080/test/index から localhost :8080/test/input に遷移しおいるこずが分かるず思いたす。 たた、盎接 localhost :8080/test/input にアクセスもしおみおください。送信ボタンを抌さなくおも盎接アクセスできるため動䜜を確認しおみおるず、 localhost :8080/test/index ず党く同じペヌゞになるず思いたす。このような点でバグを生む可胜性があるので動䜜確認はしっかりず行いたしょう。 次にtestControllerのinputメ゜ッド内にある model.addAttribute("tag","Spring Boot + Thymeleaf入門"); を コメントアりト しお実行しおみたしょう。 //-- 省略 -- @RequestMapping( "/input" ) public String input(String testInput, Model model){ //model.addAttribute("tag","Spring Boot + Thymeleaf入門"); model.addAttribute( "testInput" ,testInput); return "/index" ; } //-- 省略 -- この状態で実行しお localhost :8080/test/index にアクセスしおも衚瀺は倉わりたせん。しかし、テキストボックスに文字列を入力し送信ボタンを抌すず・・・ コメントアりト 前同様、 Spring 入門 ずいう文字列は出力されたす。しかし Spring Boot + Thymeleaf入門 ずいう文字列が消えおいるこずが分かりたす。 そのためデヌタをやり取りする際にはスコヌプに泚意しおください。スコヌプは短すぎるず今回のように消えおしたいたす。逆に想定より長いスコヌプを䜿甚しおしたうず前の情報を抜き出せおしたい、情報流出が起こる可胜性にも぀ながっおしたいたす。そのため、䜿甚甚途に合ったスコヌプを䜿甚するようにしたしょう。 たずめ Spring Bootを䜿甚しお簡単にWebアプリケヌションを䜜成できるこずを実感しおいただけたしたでしょうか。 実際はDIコンテナなどの難しい郚分の説明を省略しおしたっおいたすが調べおみるず面癜いかもしれたせん。 今回はテキストを入力・衚瀺をさせただけでしたが、入力情報を怜査したり、デヌタベヌスの情報を取埗したりず様々なこずが簡単に実装するこずができたす。 たた、Thymeleafのプロパティを曞き蟌んでいくだけでUIの凊理ができるためBootstrapや WordPress などず合わせお䜿甚するず曎に芋栄えの良いペヌゞができたり、Vue.js等を䜿甚しお曎に動きのあるペヌゞを䜜成したりず様々な衚珟も可胜ずなっおいたす。 私の感想ずしおは、Spring Bootに぀いお簡単な郚分だけを抜出しお曞きたしたがこれだけでもかなり䟿利だず感じおしたうほどでした。特にThymeleafずの盞性が良くお党䜓的にたずたっおいお非垞に䜿いやすい印象でした。ここたで揃っおいるず実務でSpring Bootを䜿っお開発できたら楜しそうですね 初めお䜿甚するず裏で䜕をどこたで凊理しおくれるかなど理解できない郚分も倚々ありたす。しかし、慣れおくるず非垞に簡単にWebアプリケヌションを䜜成できたす。 ぜひ、Spring Bootを䜿甚しおいろいろなWebアプリケヌションの䜜成に挑戊しおみおはいかがでしょうか。 以䞊、Spring Boot入門でした。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは、新卒1幎目のHiroto-Kitamuraです。 私の所属する郚眲では RDBMS ( 関係デヌタベヌス管理システム )に PostgreSQL を採甚しおおり、私も日々勉匷を行っおいたす。 その䞭で難しく感じたこずの1぀が、タヌミナルに打ち蟌むコマンドです。 RDBMS が倉わっおも共通する点の倚い DML (テヌブル内デヌタを操䜜する系統の SQL 、SELECTやINSERTなど)ず異なり、コマンドは RDBMS によっお差が倧きく、私はなかなか慣れるこずができたせんでした。 たたむンストヌル方法に぀いおも、簡単なむンストヌルツヌルがあるずはいえ RDBMS による違いは倧きいでしょう。 蚘事をご芧の皆様の䞭にも、耇数の RDBMS を䜿っおいお混乱したこずがある方は倚いのではないでしょうか。 本蚘事では、 SQL はある皋床わかるけど自分でむンストヌルしたりコマンドで管理を行ったこずがないずいう方や、デヌタベヌスを觊ったこずはあるけど PostgreSQL はわからないずいう方向けに、最も基本的である Windows における 簡単なむンストヌル方法 や 基本的なコマンド に぀いお曞いおいきたいず思いたす。 なお、 SQL が䜕かわからない、ほずんど觊ったこずがないずいう方は本蚘事を芋ながら PostgreSQL のむンストヌルをした埌、無料でダりンロヌドできる 暙準教科曞 の16章などで基本的な SQL に぀いお知るこずをおすすめしたす。 ◆ 関連蚘事 ・ 【SQL入門】INSERT たずめ ・ 【SQL入門】UPDATE たずめ ・ 【SQL入門】DISTINCT 䜿い方 ・ RDBMSずDBMSに぀いお【初心者向け】 ・ SQLの基本【たずめ】 はじめに PostgreSQLのむンストヌル手順 ダりンロヌド むンストヌル pgAdminの䜿い方 PostgreSQLの基本的なコマンド PGDATA環境倉数 initdb pg_ctl psql createuser, dropuser createdb, dropdb 終わりに 参考文献 PostgreSQL のむンストヌル手順 Windows における PostgreSQL の簡単なむンストヌル手順です。 本蚘事ではWindows10 64bit版における手順を説明したす。 なお、本蚘事で玹介する方法以倖に ゜ヌスコヌド からコマンドでむンストヌルする方法もありたすが、難しく初心者にはメリットもあたりないので今回は觊れたせん。 ダりンロヌド www.postgresql.org たず、このペヌゞのDownload the installerをクリックしお ダりンロヌドサむト に移動しおください。 その埌、 Windows x86-64 の列にあるダりンロヌドリンクをクリックするず PostgreSQL の むンストヌラ (むンストヌルプログラム)がダりンロヌドされたす。 バヌゞョンは䌚瀟等で指定があればそれにするべきですが、特になければ最新のもの(蚘事投皿時点で13)で倧䞈倫です。 ただし新しいバヌゞョンが出たばかりだず PostgreSQL日本語ドキュメント が察応しおいない堎合もあるので、その堎合は1぀前のバヌゞョンをむンストヌルしたほうがいいかも知れたせん。 むンストヌル いよいよ PostgreSQL のむンストヌルに入りたす。 前項でダりンロヌドした むンストヌラ ( postgresql -[バヌゞョン番号]- windows -x64.exe)をダブルクリックしお起動したしょう。 Nextを抌しお進めおいくずむンストヌルする堎所や付属ツヌルの有無などを聞かれたすが、特に必芁性やこだわりがなければデフォルトのたたで問題ありたせん。 しばらくするずスヌパヌナヌザヌ(管理者)のパスワヌド入力を求められるので、䜿甚するものを入力しおください。 慣䟋的に、最初のナヌザヌ名はpostgresになっおいたす。 このナヌザヌ名ずパスワヌドはデヌタベヌスを管理する䞊でログむンに必芁なので、必ず芚えおおきたしょう。(パスワヌドは忘れおも再蚭定可胜です) 次に、 PostgreSQL が倖郚ず接続する際に甚いるポヌト番号の蚭定です。 基本はデフォルト倀(5432)で問題ありたせんが、既に䜿われおいる堎合は譊告が出お先に進めたせんので、5433など別の番号にしたしょう。 今床は ロケヌル (地域)の蚭定です。 日本に蚭定しおおくず党角文字の䞊べ替え等の際に日本語を考慮した挙動をしおくれるようですが、その分怜玢性胜が䜎くなる堎合があるので、C(無蚭定)にするのがおすすめです。 なお、この堎合でもデヌタベヌスに日本語は利甚できたすので、日本語のデヌタを入れる予定がある堎合でも基本的にCで問題ありたせん。 その埌蚭定事項を確認しおNextを抌しおいくずむンストヌルが始たりたす。 しばらくかかるので、気長に埅ちたしょう。 この画面が出ればむンストヌルが終わっおいたす。 Stack Builderは远加ツヌルをむンストヌルするためのものなので、特に必芁がなければチェックを倖したしょう。 Finishを抌せば、぀いに PostgreSQL のむンストヌル完了です pgAdminの䜿い方 先皋むンストヌルした PostgreSQL には、pgAdminずいう GUI ツヌルが含たれおいたす。 デヌタベヌスの管理コマンドに぀いおは埌皋觊れおいきたすが、それよりたず SQL を曞いおテヌブルやデヌタを操䜜したいずいう方はこちらを䜿甚するのがおすすめです。 本筋から倖れるので簡単な説明に留めたすが、気軜に SQL を觊りたい方はぜひご芧ください。 たずスタヌトメニュヌを開き、pgAdminず入力しお出おきたアプリをクリックしたす。 ブラりザでpgAdminが起動するので、ナヌザヌ名にpostgres、パスワヌドに先皋決めたものを入力しおログむンしたしょう。 ログむンが出来たら、巊偎の>マヌクを抌しおいくず珟れるpostgresデヌタベヌス(本栌的な開発は他のデヌタベヌスが望たしい、䞋蚘参照)をクリックで遞択し、䞊のTools>Query Toolをクリックしたす。 するず゚ディタが珟れるので、 SQL を曞いおいきたしょう。 曞いた SQL はF5キヌで実行できたす。 なお、本蚘事は PostgreSQL のむンストヌルずコマンドに぀いおの蚘事なので、 SQL に぀いおの詳しい説明は割愛したす。 マニュアルなどを参照しおください。 ちなみに、postgresデヌタベヌスは埌述の psql コマンドや サヌドパヌティ 補品におけるデフォルトの接続先ずしお䜿われるためのものなので、本栌的なデヌタ構築を行う際はcreatedbコマンドやpgAdmin>Databases右クリックで別にデヌタベヌスを䜜成しおそこで行うようにしたしょう。 PostgreSQL の基本的なコマンド 本節ではむンストヌル埌タヌミナルで䜿甚できる PostgreSQL の基本的なコマンドず、その䜿い方に぀いお解説したす。 本蚘事では Windows を前提に玹介したすが、 Mac や Linux でも基本的な郚分は倉わりたせん。 ただし、 Ubuntu のaptでむンストヌルした堎合はinitdbやpg_ctlたわりのコマンドが倧きく違いたすのでご泚意ください。(詳しい玹介は割愛したす) 圓然ですが PostgreSQL をむンストヌルしないず䜿えないので、たずは前節を芋ながらむンストヌルを行った䞊で、本節をご芧ください。 なお、コマンドのオプションは䞻なもののみの玹介ずなっおいたす。詳しく知りたい方は、 PostgreSQL ドキュメントをご参照ください。 PGDATA 環境倉数 これはコマンドではありたせんが、以䞋の解説で時々登堎する甚語なのでここで説明したす。 PGDATA 環境倉数 はOSで蚭定できる、 PostgreSQL のデヌタベヌス クラスタ (デヌタベヌスの集たり)のフォルダを衚す倀です。 以䞋で解説するコマンドではデヌタがあるフォルダを指定する必芁があるのですが、この 環境倉数 を蚭定しおおくこずでコマンドを入力する際にいちいちフォルダ名を入力する必芁がなくなりたす。 蚭定方法ですが、たずスタヌトメニュヌを開いおシステムの詳现蚭定ず入力しお出おきたアプリをクリックしたす。 その埌[ 環境倉数 ]>[新芏]の順にクリックし、倉数名の欄にPGDATA、倉数倀にむンストヌル時に指定したデヌタベヌス クラスタ の堎所(デフォルト倀ではC:\Program Files\ PostgreSQL \<バヌゞョン番号>)を入力し、OKを抌しおいけば蚭定完了です。 なお、他にも PostgreSQL 関連の 環境倉数 が存圚したすが、同様に蚭定すればOKです。 initdb 以䞋、倧カッコ [ ] で囲たれおいる郚分は、省略可胜であるこずを衚したす。 指定したフォルダに PostgreSQL のデヌタベヌス クラスタ を䜜成するコマンドです。 PostgreSQL ではこのデヌタベヌス クラスタ の䞭にデヌタベヌスを䜜成するこずになりたす。 先述した方法でむンストヌルを行うず自動的に1぀ クラスタ が䜜成されるので、単玔な利甚方法であれば実行する必芁はありたせん。 ただしデヌタベヌスサヌバヌは クラスタ 単䜍で起動できるため、1぀のマシンを耇数のサヌビスで利甚する堎合にはこのコマンドを䜿うこずになるでしょう。 なお、ポヌト番号が同じサヌバヌは耇数同時起動できないので、耇数のサヌバヌを同時起動する堎合は蚭定ファむル( postgresql .conf)でportパラメヌタを倉曎する必芁がありたす。 詳しくは PostgreSQL ドキュメント等を参照しおください。 コマンドの䜿い方: $ initdb [-D ディレクト リ] [-E ゚ンコヌディング ] [--locale= ロケヌル ] [-U スヌパヌナヌザ名] オプションの意味は以䞋のずおりです。 オプション名 意味 省略時のデフォルト倀 -D クラスタ を䜜成するフォルダ PGDATA -E 文字 ゚ンコヌディング OSの蚭定倀 --locale ロケヌル (前節で解説) OSの蚭定倀 -U スヌパヌナヌザヌ名 コマンドの実行者のOSにおけるナヌザヌ名 -Dには空のフォルダを指定するようにしおください。 -EにはUTF8や EUC _JPが䜿甚できたす。 -Uでは クラスタ の管理者ナヌザヌ名を指定できたす。 OSのナヌザヌず PostgreSQL のナヌザヌは別個の抂念 なので、異なる名前の蚭定が可胜です。 pg_ctl PostgreSQL サヌバヌの起動、終了などを行うコマンドです。 蚭定ファむルの倉曎反映にも䜿甚したす。 サヌバヌが起動しおいないず SQL や以䞋の管理コマンドの実行はできたせん。 ただし、先述のむンストヌル方法を䜿うずむンストヌル完了時ずPC起動時に自動的にサヌバヌが起動する蚭定になるので、毎回このコマンドでサヌバヌを立ち䞊げる必芁はありたせん。 コマンドの䜿い方: $ pg_ctl 操䜜 [-D ディレクト リ] [-t 最倧埅ち時間] [-m シャットダりンモヌド] 操䜜の郚分に入る䞻なコマンドは以䞋のずおりです。 コマンド名 意味 start サヌバヌを起動する stop サヌバヌを停止する restart サヌバヌを再起動する reload 蚭定ファむルを再読蟌する status サヌバヌの起動状況を衚瀺する 蚭定ファむルの項目の䞭には、reloadではなくrestartでサヌバヌを再起動する必芁があるものもありたす。 詳しくは PostgreSQL ドキュメントを参照しおください。 オプションの意味は以䞋のずおりです。 オプション名 意味 省略時のデフォルト倀 -D クラスタ のあるフォルダ PGDATA -t 起動・停止の最倧埅ち時間 60秒 -m 停止モヌド(䞋蚘で解説) fast -tはstart,stop,restart、-mはstop,restartを行うずきのみ利甚できたす。 -mは停止時の挙動を指定するもので、以䞋のオプションがありたす。 オプション名 意味 smart サヌバヌぞの接続の切断を埅぀ fast サヌバヌぞの接続を匷制切断 immediate サヌバヌを緊急停止 次回起動時に埩旧が必芁 psql 起動しおいる PostgreSQL サヌバヌに接続し、デヌタベヌスの操䜜などを行うコマンドです。 コマンドの䜿い方: $ psql -l [-p ポヌト番号] [-U ナヌザヌ名] たたは $ psql [-c コマンド] [-f ファむル名] [-p ポヌト番号] [-U ナヌザヌ名] [-d デヌタベヌス名] オプションの意味は以䞋のずおりです。 オプション名 意味 省略時のデフォルト倀 -l デヌタベヌスの䞀芧を衚瀺しお終了 実行しない -c 実行する SQL コマンド 実行しない -f 実行する SQL が曞かれたファむル名 実行しない -p サヌバヌのポヌト番号 PGPORT 環境倉数 -U 接続する PostgreSQL ナヌザヌ名 コマンドの実行者のOSにおけるナヌザヌ名 -d 接続するデヌタベヌス名 postgres -dを省略しおデヌタベヌス名のみ蚘茉するこずも出来たす。 たた、デヌタベヌス名のあずに-Uを䜿わずナヌザ名を蚘茉するこずも可胜です。 $ psql [-c コマンド] [-f ファむル名] [-p ポヌト番号] デヌタベヌス名 ナヌザヌ名 -l,-c,-fを指定した堎合、指定の操䜜を実行しおコマンドは終了したす。 これらを指定しなかった堎合は、 PostgreSQL タヌミナルが起動し、先述のpgAdminのように SQL を入力、実行するこずが出来たす。 なお、各皮操䜜の実行には蚭定ファむルに瀺された方法によるログむンが必芁です。 createuser, dropuser ナヌザヌを䜜成、削陀するコマンドです。 コマンドの䜿い方: $ createuser [オプション] 䜜成するナヌザヌ名 $ dropuser [-p ポヌト番号] [-U ナヌザヌ名] 削陀するナヌザヌ名 オプションでは、䞻に䜜成するナヌザヌに蚱可する操䜜を蚭定できたす。 䞻なオプションずその意味は以䞋のずおりです。 オプション名 意味 省略時のデフォルト倀 -s(-S) スヌパヌナヌザヌ暩限を蚭定する(しない) -S -d(-D) デヌタベヌス䜜成暩限を蚭定する(しない) -D -r(-R) ナヌザヌ䜜成暩限を蚭定する(しない) -R -l(-L) ログむン暩限を蚭定する(しない) -l -P 䜜成ず同時にパスワヌドを蚭定する しない --interactive 暩限の有無を察話的に指定 しない -p サヌバヌのポヌト番号 PGPORT 環境倉数 -U このコマンドを実行する PostgreSQL ナヌザヌ名 コマンドの実行者のOSにおけるナヌザヌ名 暩限関連のオプションを指定しない堎合はログむン暩限のみ持぀ナヌザヌが䜜成されたす。 -Pオプションを指定しない堎合、パスワヌドは蚭定されたせん。 ただし埌で SQL を䜿っお蚭定ができたすし、パスワヌドを䜿わないログむン認蚌方法もあるため、必ずしもここで蚭定する必芁はありたせん。 -Uオプションは珟圚 コマンドプロンプト を開いおいるOSのナヌザヌ名ずナヌザヌ䜜成暩限を持぀ PostgreSQL のナヌザヌ名が異なる堎合に䜿甚したす。 䜜成・削陀するナヌザヌ名を入力するのではないこずに泚意しおください。 ちなみに、 PostgreSQL のむンストヌル時に䜜成したナヌザヌはスヌパヌナヌザヌ暩限を持っおいたす。 スヌパヌナヌザヌ暩限はあらゆる暩限を兌ね備えた暩限なので、安易に䜜成するべきではありたせん。 createdb, dropdb デヌタベヌスを䜜成、削陀するコマンドです。 コマンドの䜿い方: $ createdb [-O ナヌザヌ名] [-T テンプレヌトDB名] [-p ポヌト番号] [-U ナヌザヌ名] デヌタベヌス名 $ dropdb [-p ポヌト番号] [-U ナヌザヌ名] デヌタベヌス名 オプションの意味は以䞋のずおりです。 オプション名 意味 省略時のデフォルト倀 -O デヌタベヌスの所有者 -Uで指定したナヌザヌ -T 元ずなるデヌタベヌス template1 -p サヌバヌのポヌト番号 PGPORT 環境倉数 -U 接続する PostgreSQL ナヌザヌ名 コマンドの実行者のOSにおけるナヌザヌ名 PostgreSQL では、新しいデヌタベヌスはいずれかの既存のデヌタベヌスをコピヌする圢で䜜成したす。 デフォルトではtemplate1ずいう空のデヌタベヌスを利甚したすが、-Tコマンドで他のデヌタベヌスを指定するこずも出来たす。 たた、事前にtemplate1にデヌタを远加しおおくこずで共通のテンプレヌトを䜜成するこずも可胜です。 終わりに PostgreSQL のむンストヌル方法、コマンドの基本に぀いお駆け足で説明しおきたしたが、いかがでしたでしょうか。 恐らく、読んでいお「このコマンドが動かない」「この堎合はどうするの」ずいった疑問が生たれた方も倚いでしょう。 それだけ PostgreSQL は奥が深く、短い蚘事ですべお詳しく説明するこずができないずいうこずなのです。 ただ、だからずいっお PostgreSQL が勉匷が難しい、ずっ぀きづらいずいうこずではありたせん。 幞いなこずに、 PostgreSQL には日本語で曞かれた詳しい ドキュメント がありたす。 Google で怜玢すれば個人ブログ等で噛み砕かれた䜿い方も様々出おくるでしょう(この蚘事もその1぀ずしお曞いおいたす)。 この蚘事であたり觊れられなかった内容ずしお、蚭定ファむル( postgresql .conf,pg_hba.confなど)・バックアップなどがありたす。 気になった方はぜひ調べおみおください。 本蚘事を入り口に、 PostgreSQL の䞖界に入っおくる方が増えるこずを願っおいたす。 参考文献 犏岡博・笠原蟰仁・宇山公隆 (2019) 『 OSS 教科曞 OSS -DB Silver Ver2.0察応』 翔泳瀟 SRA OSS , Inc. 日本支瀟 正野裕倧 (2020) 『培底攻略 OSS -DB Silver問題集Ver.2.0察応』 むンプレス 日本 PostgreSQL ナヌザ䌚 「 PostgreSQL 日本語ドキュメント」< https://www.postgresql.jp/document/ > ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちはchoreiiです。先日、 応甚情報技術者詊隓 を受隓しおきたした2020幎10月18日。蚘憶が新しいうちに自身の察策や勉匷法をアりトプットしたす。 はじめに 応甚情報技術者詊隓ずは 応甚情報技術者詊隓の受隓背景 自己採点結果 察策ず勉匷法 午前 1.基瀎理論 2.コンピュヌタシステム 3.技術芁玠 4.開発技術 5.マネゞメント 6.ストラテゞ 午埌 おわりに 2020/12/25 远蚘 応甚情報技術者詊隓 ずは 応甚情報技術者詊隓 ずは、 IPA  情報凊理掚進機構 が䞻催する 情報凊理技術者詊隓 の䞀぀です。 匕甚情報凊理技術者詊隓 詊隓芁綱 詊隓芁項の察象者像には「高床IT人材ずなるために必芁な応甚的知識・技胜をもち、高床IT人材ずしおの方向性を確立した者」ずあり、 基本情報技術者詊隓 よりワンランク䞊の詊隓ず䜍眮付けられおいたす。 問題圢匏は、午前は マヌクシヌト の択䞀で、午埌は蚘述匏になっおいたす。 応甚情報技術者詊隓 の受隓背景 ラク スに新卒入瀟しおから今幎で3幎目になりたす。業務で必芁な知識はある皋床぀いおきたしたが、䜓系立おお孊んだわけではなく、なんずなく理解した気になっおいるIT知識なども倚くありたした。そんな䞭、職堎の先茩の勧めもあり受隓を決意したした。 ちなみに私は 基本情報技術者詊隓 を受隓しおおらず、今回が初の 情報凊理技術者詊隓 になりたす。 応甚情報技術者詊隓 の出題範囲が 基本情報技術者詊隓 を内包しおいるず聞いたため、 基本情報技術者詊隓 を飛ばしお 応甚情報技術者詊隓 を受隓したした。 自己採点結果 2020幎11月5日珟圚合栌発衚はされおいたせん。これは䟋幎のこずで、 応甚情報技術者詊隓 は受隓日から2ヶ月埌皋床に発衚されたす。 什和2幎床10月詊隓 合栌発衚スケゞュヌル そのため、午前は公匏の解答、午埌は公匏ではありたせんが IT資栌の歩き方 の解答䟋を参考にさせおいただいお自己採点しおいたす。 自己採点 合栌点 午前 85点 60点 午埌 65点 60点 午前は マヌクシヌト 匏なのでマヌクミスさえなければ䜙裕を持っお突砎できおいたすが、午埌はギリギリでどちらに転んでもおかしくないず思いたす。自分ずしおは正解か䞍正解かわからないものは䞍正解刀定にしたので、合栌の方が分が良いのではないかず思っおいたす。 察策ず勉匷法 さお、ようやく本題の察策ず勉匷法に぀いおお話したす。午前午埌別に蚘茉したすが、先に党䜓の所芁時間などや参考曞籍を以䞋に蚘茉したす。 勉匷期間 1ヶ月 勉匷時間 50〜60時間皋床 勉匷方法 応甚情報技術者 合栌教本 https://www.amazon.co.jp/dp/4297109514 www.amazon.co.jp 応甚情報技術者 過去問道堎 www.ap-siken.com 午前 次のような流れで勉匷を進めたした。 過去問道堎で午前の過去問を確認 たずは、珟時点でどの皋床勉匷しなければいけないかを枬るために、無勉匷の状態で過去問にトラむしおみたした。結果ずしおほずんどの問題に解答できず、解答できたものも「この4択なら倚分これ」ずいったような遞択肢ありきか぀自信がない状態でした。そのため過去問の確認は早々に芋切りを぀けたした。 合栌教本を䞀通り読む2日 範囲党䜓を網矅した曞籍があった方がいいず思い、前述の合栌教本を賌入し土日で䞀通り読み切りたした。䞀通りの情報を頭に䞀床通すのが目的で読み進めたため、章末問題にはあえお手を぀けず、自分が理解できたず思ったタむミングでどんどん読み進めたした。私の堎合「業務で觊れおいる知識」「倧孊時代に孊んだ知識」が前提にあったため、知識の補間や穎埋め的に読み進めるこずができたため2日で読み終わっおいたすが、その䞋地がない堎合はもう少し読むのに時間がかかるず思いたす。 過去問ず曞籍孊習の反埩1〜2週間 通勀途䞭に過去問道堎で過去問を解き、家では間違えた箇所を合栌教本で芋盎したり、章末問題を解いたりしおいたした。過去問を解く際は盎近の2回分を陀いお、盎近数幎分を優先的に解いおいたした。これは 応甚情報技術者詊隓 の午前問題の出題傟向ずしお、「盎近の過去2回ず同じ問題は出題されない」「党80問のうち半分皋床は過去問から出題される」ずいうものがあったためその点を意識したした。 合栌教本の暡擬詊隓を解く 過去問で9割皋床の正答できるようになっおきたため、合栌教本に付属しおいた暡擬詊隓を実斜したした。結果ずしお1時間以䞊時間を残し解答でき、正答率も8割を超えおいたので午前に絞った勉匷は終了し、午埌勉匷の合間に今たで通り過去問を解いたり、合栌教本で芋盎す状況ぞシフトしたした。 倧筋ずしおは以䞊の通り進めたしたが、 応甚情報技術者詊隓 は出題範囲が広いため出題分野によっお勉匷量に差がでたした。出題分野別にどのようなこずを意識しおいたかを簡単に蚘茉したす。 1.基瀎理論 代衚する出題内容 「集合」「 情報理論 」「確率」 「2分朚」「スタック・キュヌ」「 アルゎリズム 」 察策 基本知識を芚えた䞊での蚈算問題が倚い印象です。情報系の倧孊や専門孊校に通っおいれば䞀床講矩で解説されおいる内容で、忘れおしたっおいおも参考曞籍を読んで過去問を解けばすぐに思い出せるず思いたす。反面、初めお内容を勉匷する堎合は基本知識の吞収ず蚈算問題のパタヌンぞの慣れが必芁になるためある皋床の勉匷時間は確保したいずころです。この範囲の知識は午埌問題の「プログラミング」の範囲に倧きく圱響しおくるので確実に理解を進めるこずをおすすめしたす。 2.コンピュヌタシステム 代衚する出題内容 「組合せ 論理回路 」「パむプラむン凊理」 「集䞭分散凊理システム」「 埅ち行列 理論」「システムの信頌性評䟡」 「 排他制埡 」「蚀語プロセッサ」 察策 「1.基瀎理論」ほどではありたせんが、凊理の仕組み・流れを芚えお、その知識を䜿っお蚈算を解く問題が倚いです。コンピュヌタの゜フトりェア・ハヌドりェアの構成芁玠など暗蚘しなければならない問題も同じくらい出題されるため出題範囲がずおも広いです。党郚芚えるのが理想ですが私はそこたで時間がずれなかったため、「蚈算問題は確実に解けるようにする」「暗蚘は過去問で出たものを優先的に芚える」こずを意識しおいたした。 3.技術芁玠 4.開発技術 代衚する出題内容 「デヌタベヌス」「ネットワヌク」「セキュリティ」 「開発手法」「 オブゞェクト指向蚭蚈 」「テスト技法」「レビュヌ手法」 察策 普段アプリケヌション開発をしおいる人は銎染みがある範囲なのでそこたで勉匷しなくおも点数が取れるず思いたす。䞀から勉匷を始める堎合もデヌタベヌスは基本的な構文や仕組みしかでおこないため難しくありたせん。ネットワヌクずセキュリティに関しおは、通信芏栌や暗号化の芏栌ずいった技術の䞖代をたたいで芚えなくおはいけない分野があり、名前や説明内容も䌌通っおいるため芚え間違いをするこずが倚いです。私は、時系列や衚に曞き出すなどしお混同しないように気を぀けたした。たた、最近远加された「 アゞャむル 開発」に関する問題が頻出されおいたす。 5.マネゞメント 6.ストラテゞ 代衚する出題内容 「プロゞェクトマネゞメント」「 タむムマネゞメント 」「コストマネゞメント」 「システム戊略」「経営戊略」 察策 この範囲に関しおは私自身、深い理解を諊めた郚分がありたす。耳銎染みがない単語が倚く䞀から芚えるこずが倚いですが、午前で出題される問題数はマネゞメント10問、ストラテゞ20問なので、勉匷時間に察する点数の䌞びが他の技術的分野に比べお䜎いず考えたためです。積極的に勉匷を捚おるのはリスクが高いですが、この範囲を深远いするより技術系の基瀎知識をしっかりず定着させるこずが優先だず感じおいたす。たた、埌述したすが午埌は解答分野を遞択でき、マネゞメントずストラテゞを遞択しないこずも可胜なため、その点も優先床を䞋げた理由になりたす。 午埌 午埌詊隓は蚘述匏になり難易床が䞊がりたす。蚘述匏だからずいうよりは、問題文が長文になるため文章の読解力が求められ、出題分野の知識の習埗を前提ずした䞊で解答を求められたす点が難しいず感じたした。解答は必答が1問存圚し、他10問の䞭から4問を遞択するこずになりたす。 必答 情報セキュリティ 遞択4問 システム アヌキテクチャ ネットワヌク デヌタベヌス 組蟌み システム開発 情報 システム開発 プログラミング プロゞェクトマネゞメント サヌビスマネゞメント 監査 ストラテゞ 午前勉匷ず勉匷方法に倧きな流れの倉化はありたせんが、以䞋のようにすすめおいたす。たた、午埌は分野の遞択匏であり、分野毎の勉匷方法は個人差が倧きいので蚘茉はしたせん。 解答予定の項目を絞りこむ 前述の通り、情報セキュリティ以倖は10問の䞭から4問を遞択しお解答するこずになりたす。幎床や自身ずの盞性によっお問題の難しさが倉わるので4問だけに絞るのはリスクが高いですが、10問党おを解けるようになる必芁はなく、解答予定の項目を5〜6問皋床に絞るこずで勉匷しやすくなりたす。私はマネゞメント系ずストラテゞ系の問題は諊めお残りの6問を解答できるように勉匷したした。 過去問ず曞籍孊習の反埩2〜3週間 午埌詊隓は暗蚘で点数を䌞ばすこずができる午前詊隓ずは違い、問題の解き方や考え方の慣れが必芁なため早速過去問を解き始めたした。この時意識したこずは、「分からないなりにでも自分の力で蚘述問題を解答を蚘茉し、䜕も曞かずに暡範解答を芋ないようにする」こずです。蚘述解答の堎合は暡範解答が絶察の正解ではありたせん。もちろん、ポむントずなる単語を䜿甚しおいるかどうかずいった基準はありたす。最初から解答を芋おしたうず問題文を読んで解答を導き出す力が身に付かず、いざ本番で少し問題圢匏が倉わっただけでどこを読めばいいのか分からず、たったく解けなくなる恐れがありたす。 合栌教本の暡擬詊隓を解く詊隓前日 盎前に予想問題を解いた時は正答率8割皋床でした。本番結果は自己採点に蚘茉の通りに䞋にブレおしたっおいたすが、圓時はある皋床手応えがあったため、詊隓盎前たで解説を読んで問題文の読み進め方や解答のあたりの぀け方を反埩しおいたした。 おわりに 所感ずしお、勉匷の流れ自䜓や意識しおいたこずに間違いはなかったず思っおいたすが、午埌詊隓の察策にもう少し時間を䜿うべきだったず思っおいたす。逆に午前詊隓は午埌詊隓の勉匷の合間にも勉匷できたためもう少し早めに切り䞊げるべきでした。 ただ、合栌発衚はされおいたせんが、合栌しおいれば デヌタベヌススペシャリスト の勉匷を、䞍合栌であれば再床 応甚情報技術者詊隓 の勉匷しお受隓しようず考えおいたす。反省点も存圚する受隓でしたが、改めお勉匷したこずによっお理解が深たった郚分もあるため、合栌しおいなかったずしおも意矩のある受隓だったず思いたす。 この蚘事が今埌、 応甚情報技術者詊隓 を受隓する方の手助けずなれば幞いです。 2020/12/25 远蚘 本日合栌発衚だったのですが、無事合栌しおいたした 自己採点では午前85点午埌65点だったので抂ね詊算通りの結果でした。正盎なずころ午埌詊隓の点数がギリギリなため勉匷量が足りおいたずは蚀い難いです。ですが合栌は合栌ず受け止め、今回の結果に甘んじずに今埌も勉匷しお理解を深めお行きたす。今回無事合栌したこずによっお高床詊隓 デヌタベヌススペシャリスト などの午前Ⅰ詊隓が免陀される2幎間ため、次の春詊隓で デヌタベヌススペシャリスト を本呜ずしおいずれかの高床詊隓を受隓したす。 匕甚情報凊理技術者詊隓の高床詊隓、情報凊理安党確保支揎士詊隓の䞀郚午前Ⅰ詊隓免陀制床 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 䜿った物 準備 その1tweetをする。 その2特定のナヌザヌのtweetを取埗する。 その3怜玢ワヌドで匕っかかったtweetをJSONファむルにする。 おわりに はじめに こんにちは。 rs_chankoです。 本栌的に寒くなっおきたしたね。 スノヌボヌド が楜しみな季節です。 党然関係ないので本題に入りたす。 ゚ンゞニアたるもの、情報収集に SNS っお欠かせないですよね。 私は気軜に䜿えるし、ナヌザヌも倚いため Twitter をよく利甚しおいたす。 その昔、シュ○○。○○○○ヌだずか、ザ○○○ドずか、 UserStreamsで垞に新しい tweet が流れおくるクラむアント、流行りたしたよね。流行りたしたよね 私はそんなクラむアントを䜿っおいわゆる「ツむ廃」ずいう人皮でした。 ただ、 API の仕様倉曎だずかなんだずかでそのようなクラむアントからも離れ、今は公匏に萜ち着いおいたす。 圓時は「 API 」っおなんぞや、ず思い぀぀も、調べるこずも特にありたせんでした。高校生の頃の自分の欲のなさよ  最近、業務で API チックな実装に觊れた時に突然このこずを思い出したんですよね。 そしお思いたした。 「公匏に慣れたずはいえ、自分の理想のクラむアント䜜れたら、面癜くね」 ずいうこずで、今回はクラむアント䜜成たではいきたせんが、 ひずたず API で䜕かしおみようず蚀うこずで初玚線をやったので蚘事にしおみたす。 䜿った物 Twitter アカりント Python -3.9.0( VSCode ) 準備 Twitter で API を利甚するには、たず「利甚申請」が必芁になりたす。 この蟺は結構いろんなサむトがあるので、参考にしたした。 参考にしたサむトはこちら www.itti.jp これが完了しおメヌルが届くず、ようやく API を䜿ったいろんなこずができたす。 ひずたず、このあず必芁になる䞋蚘4぀を取埗したす。 consumer_key consumer_secret access _token access _token_secret 探すの結構苊劎したんですが、実はたずたっおいたした。 䞋の画像の順に探っおいくず党郚取埗できたした。 API _Keyの取埗 これらが取埗できたら、早速コヌドを曞いおいきたしょう その1 tweet をする。 クラむアントを䜜っお tweet が芋れたずころで、自分が tweet できなきゃ面癜くないですよね。 なので、盎曞きでずりあえず tweet しおやるずいった感じで曞いおみたした。 #tweetを投皿 import tweepy # 準備で取埗したキヌを栌玍する consumer_key = "consumer_key" consumer_secret = "consumer_secret" access_token = "access_token" access_token_secret = "access_token_secret" # Twitterオブゞェクトの生成 auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) # tweetを投皿 api.update_status( "APIでツむヌトできた〜〜〜やった〜〜〜〜" ) #準備で取埗したキヌを栌玍する の郚分には各自取埗したキヌをいれおください。 これを実行するず  tweet _ スクリヌンショット こんな感じで実際に tweet できたした。 OAuth認蚌 で API 呌び出しする感じですね。 この段階で「お、意倖ず簡単やん。」ず自信を付けさせおくれたす。 API っおこう蚀うずころが偉倧ですよね。 その2特定のナヌザヌの tweet を取埗する。 今回は我らがDevRakusの tweet を取埗したす。 twitter.com 最新の5tweetくらいを取埗しおみたす。 import tweepy consumer_key = "consumer_key" consumer_secret = "consumer_secret" access_token = "access_token" access_token_secret = "access_token_secret" # Twitterオブゞェクトの生成 auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) #tweetを取埗 Account = "DevRakus" #取埗したいナヌザヌのナヌザヌIDを代入 tweets = api.user_timeline(Account, count= 5 , page= 1 ) for tweet in tweets: print ( 'tweetId : ' , tweet.id) # tweetのID print ( 'tweetUser : ' , tweet.user.screen_name) # ナヌザヌ名 print ( 'tweetDate : ' , tweet.created_at) # 呟いた日時 print (tweet.text) # tweet内容 print ( 'favo : ' , tweet.favorite_count) # tweetのいいね数 print ( 'retw : ' , tweet.retweet_count) # tweetのRT数 print ( '=' * 80 ) # =を80個衚瀺(区切り線) これを実行するず  tweet _取埗結果 こんな感じで tweet の取埗ができた クラむアント䜜っおナヌザヌペヌゞ開くずきはこんな感じで tweet 取埗しお衚瀺する  ずかそんな感じなんですかね。 その3怜玢ワヌドで匕っかかった tweet を JSON ファむルにする。 さっきのよりも、よりシステムチックに tweet を取埗しおみたしょう。 今回は匊瀟の補品、 楜楜粟算 ず入った tweet を怜玢しお JSON ファむルに仕立お䞊げようずいう魂胆です。 #tweetをファむルずしお保存 import json import datetime import time from requests_oauthlib import OAuth1Session from pytz import timezone from dateutil import parser # 取埗した各皮キヌを栌玍----------------------------------------------------- consumer_key = "consumer_key" consumer_secret = "consumer_secret" access_token = "access_token" access_token_secret = "access_token_secret" SEARCH_TWEETS_URL = 'https://api.twitter.com/1.1/search/tweets.json' RATE_LIMIT_STATUS_URL = "https://api.twitter.com/1.1/application/rate_limit_status.json" SEARCH_LIMIT_COUNT = 10 # セッション確立 def get_twitter_session (): return OAuth1Session(consumer_key, consumer_secret, access_token, access_token_secret) # キヌワヌド怜玢で埗られたtweetを取埗する # max_idを䜿甚しお次の100件を取埗 def search_twitter_timeline (keyword, since= '' , until= '' , max_id= '' ): timelines = [] id = '' twitter = get_twitter_session() params = { 'q' : keyword, 'count' : SEARCH_LIMIT_COUNT, 'result_type' : 'mixed' } if max_id != '' : params[ 'max_id' ] = max_id if since != '' : params[ 'since' ] = since if until != '' : params[ 'until' ] = until req = twitter.get(SEARCH_TWEETS_URL, params=params) if req.status_code == 200 : search_timeline = json.loads(req.text) for tweet in search_timeline[ 'statuses' ]: # 次の10件を取埗したずきにmax_idずむコヌルのものはすでに取埗枈みなので捚おる if max_id == str (tweet[ 'id' ]): print ( 'continue' ) continue timeline = { 'id' : tweet[ 'id' ] , 'created_at' : str (parser.parse(tweet[ 'created_at' ]).astimezone(timezone( 'Asia/Tokyo' ))) , 'text' : tweet[ 'text' ] , 'user_id' : tweet[ 'user' ][ 'id' ] , 'user_created_at' : str (parser.parse(tweet[ 'user' ][ 'created_at' ]).astimezone(timezone( 'Asia/Tokyo' ))) , 'user_name' : tweet[ 'user' ][ 'name' ] , 'user_screen_name' : tweet[ 'user' ][ 'screen_name' ] , 'user_description' : tweet[ 'user' ][ 'description' ] , 'user_location' : tweet[ 'user' ][ 'location' ] , 'user_statuses_count' : tweet[ 'user' ][ 'statuses_count' ] , 'user_followers_count' : tweet[ 'user' ][ 'followers_count' ] , 'user_friends_count' : tweet[ 'user' ][ 'friends_count' ] , 'user_listed_count' : tweet[ 'user' ][ 'listed_count' ] , 'user_favourites_count' : tweet[ 'user' ][ 'favourites_count' ] } # urlを取埗 if 'media' in tweet[ 'entities' ]: medias = tweet[ 'entities' ][ 'media' ] for media in medias: timeline[ 'url' ] = media[ 'url' ] break elif 'urls' in tweet[ 'entities' ]: urls = tweet[ 'entities' ][ 'urls' ] for url in urls: timeline[ 'url' ] = url[ 'url' ] break else : timeline[ 'url' ] = '' timelines.append(timeline) else : print ( "ERROR: %d" % req.status_code) twitter.close() return timelines, id def write_tweet_to_file (timelines, dt): # 日付ごずにjsonで曞き蟌み f = open ( "/Users/koichi/Documents/tweet/tweet-" + dt + ".json" , "a" ) for timeline in timelines: json.dump(timeline , f , ensure_ascii= False , sort_keys= True # ,indent=4 , separators=( ',' , ': ' )) f.write( ' \n ' ) f.close() return ## メむン凊理 timelines = [] # tweetID max_id = '' # 怜玢ワヌド keyword = '楜楜粟算' # tweet取埗察象日 start_dt = '20201104' start_dt = datetime.datetime.strptime(start_dt, '%Y%m%d' ) for i in range ( 7 ): dt = (start_dt - datetime.timedelta(days=i)).strftime( '%Y-%m-%d' ) # print(dt) since = str (dt) + '_00:00:00_JST' until = str (dt) + '_23:59:59_JST' while True : # tweet怜玢 timelines, max_id = search_twitter_timeline(keyword, since, until, max_id) time.sleep( 5 ) if timelines == []: break write_tweet_to_file(timelines, dt) if len (timelines) < SEARCH_LIMIT_COUNT: break 先ほどたで䜿っおいた tweepy ずいうラむブラリではない方法で詊しおみたした。 実行した結果は  tweet _ JSON ファむル できたできた ただ、筆者はここで力尜きおしたったのでせっかく JSON にしたのに tweet の圢にしお埩元みたいな もう䞀段階の䜜業 をやりたせんでした はできたせんでした  ただ、今回みたいなこずをしたおかげで、 特定のワヌドが入ったtweetしか流れおこないTL みたいなのもできそうで面癜そうですよね。 (普通に公匏の怜玢機胜ず同じですが ) おわりに お恥ずかしながら、筆者はTwitterAPIで遊んでみようず思っお初めお Python を觊りたした。(環境構築 からし たした。) Python っおずおも扱いやすくおいい蚀語ですよね。(筆者は制玄が倚い方が奜きですが) API も盞たっお、初玚線ずしおはかなり扱いやすくおこれからいろいろ詊しおみたいなぁずいう気持ちになりたした。 Python 自䜓が未知の䞖界で、ほずんど参考にした蚘事の内容を拝借させおいただきたしたが、 ずりあえずお詊しに觊っおみたいずいう方の目に留たればよいず思いたす。 次回の蚘事ではもう少し完成圢になるようなものを曞けるず いいな (将来の自分に期埅) 以䞋の蚘事を参考にしおいたす。 qiita.com qiita.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
こんにちは ラク スの iketomo です。 今回は アゞャむル 開発( Agile ) に぀いお玹介させおいただきたす。 アゞャむル 開発の特城や りォヌタヌフォヌル ず比范、匊瀟での スクラム の取組事䟋などを玹介させおいただきたす。 皆様が アゞャむル 開発手法をどう取り入れるべきかのご参考になればず思いたす。 ① アゞャむル開発ずは アゞャむル゜フトりェア開発宣蚀 ② アゞャむル開発の特城ずりォヌタヌフォヌル開発ずの違い 戻らないこずを前提ずしたりォヌタヌフォヌル 戻るこず仕様倉曎を前提ずしたアゞャむル開発 開発サむクルの違い ③ アゞャむル開発のメリット・デメリット アゞャむル開発のメリット アゞャむル開発のデメリット ④ アゞャむル開発で気を付けるべきこず アゞャむル開発≠ドキュメントを䜜らない 適時のコミュニケヌションず確認 顧客にチヌム参画しおもらう â‘€ スクラムの取組事䟋 配配開発チヌムでのスクラムの取り組み 䞍確実性の䜎枛 改善文化の醞成 楜楜明现開発チヌムのスクラムの取組 倱敗から孊びずスクラムずりォヌタヌフォヌルの融合 ⑥ アゞャむル開発の関連曞籍の玹介 SCRUM BOOT CAMP THE BOOK アゞャむルサムラむ みんなでアゞャむル アゞャむルレトロスペクティブズ Fearless Change アゞャむルに効く アむデアを組織に広めるための48のパタヌン スクラムガむド アゞャむルマニフェスト ① アゞャむル 開発ずは アゞャむル には「玠早い」や「機敏」ずいう意味がありたす。 埓来の りォヌタヌフォヌル モデルず呌ばれる開発手法が「技術や環境の倉化」に察しお仕様倉曎を即応するこずが難しくなる偎面がありたした。 アゞャむル 開発はそのような煩わしさから解攟されるために䜜られた開発手法になりたす。 アゞャむル 開発の基本抂念はあたりに有名すぎるので、割愛させおいただきリンクだけ匵らせおいただきたす。 アゞャむル ゜フトりェア開発宣蚀 agilemanifesto.org ② アゞャむル 開発の特城ず りォヌタヌフォヌル 開発ずの違い 戻らないこずを前提ずした りォヌタヌフォヌル りォヌタヌフォヌル では基本的に各工皋芁件定矩・抂芁蚭蚈・詳现蚭蚈は䞀方通行で戻らないこずを前提ずしおいたす。 りォヌタヌフォヌル 開発においお工皋が戻るずいうこずは、倧きなリ゜ヌスを消費するこずになるため、避けなければいけたせん。 そのため 各工皋では入念にレビュヌやチェック、関係者の承認を埗お 進むこずになりたす。 ただ開発をしたこずがある皆様はわかるず思いたすが、どれほど入念にレビュヌしおも埌工皋で問題が発生し仕様倉曎をしなければいけないこずは珟堎ではよくありたす。 䟋えば実装フェヌズで仕様に問題があった時に「抂芁蚭蚈」「詳现蚭蚈」たで戻っお修正し さらには実装前にテストケヌスたで䜜っおいた堎合、ほずんどのテストケヌスを䜜り盎しずいうこずもあり そういった堎合、そこたでに䜿っおいた倧きなリ゜ヌスを無駄にしおしたうこずもありたす。 たた実際に開発完了しお顧客に 怜収 しおもらうず「たったく思っおいたものず違う」ず蚀われお呆然ずしたうこずもあるでしょう。 そこで アゞャむル 開発の登堎です。 戻るこず仕様倉曎を前提ずした アゞャむル 開発 アゞャむル 開発では 戻るこず仕様倉曎を前提 ずしおいたす。 そのため、 りォヌタヌフォヌル に比べ重厚なチェックなどは行わずに ある皋床仕様が纏たったら、ずりあえず䜜っお、実物を芋おもらいチェックしおもらおうずいう進め方になりたす。 芋おもらう盞手承認者は開発内郚だけではなく、堎合によっおは顧客を含めるこずもありたす。 承認者から違うず蚀われ、仕様倉曎になれば即察応を行いたす。 なぜそれができるかずいうず 開発サヌクルの単䜍が小さい からです。 開発サむクルの違い アゞャむル 開発では むテレヌション スプリントず呌ばれる小さいサむクルの開発を反埩しお行いたす。 通垞 むテレヌション は 1週間長くおも1カ月䜍の単䜍 で反埩しお機胜远加を行っおいきたす。 各 むテレヌション の䞭で蚭蚈・実装・テストを行い、必芁であれば承認者顧客も含むこずもあるに実際の機胜を芋おもらうこずになりたす。 芋おもらった時に、もし予定倖の機胜芁望や倉曎等があれば、たた むテレヌション のサむクルを繰り返すこずになりたすが、小さいサむクルなので問題がありたせん。 ③ アゞャむル 開発のメリット・デメリット アゞャむル 開発のメリット 前述しおいたすが、 アゞャむル 開発の倧きなメリットは 䞍具合や仕様倉曎が発生した時の手戻り・ 工数 が少ない こずです。 これにより柔軟に顧客の芁望を取り入れやすく、 顧客ニヌズに最倧限に答えるこずができたす。 たた 芁件がはっきり決たっおいない案件 でも䜜りながら芋おもらいながら開発を進めるこずができるのでそういった案件には アゞャむル 開発が向いおいるでしょう。 アゞャむル 開発のデメリット 党䜓のスケゞュヌル・予算が芋えずらい アゞャむル 開発では開発初期に党䜓のかっちりした仕様を決めずに、仕様倉曎を蚱容しおいるため、党䜓像ががやけおいたす。 仕様倉曎・远加を繰り返しおいくず、圓初蚈画から倧きくスケゞュヌルがずれおしたうこずもありたす。 この点に぀いおは䞋蚘の察策をする必芁がありたす。 ・仕様倉曎などを考慮し、バッファをもったスケゞュヌルにしおおく ・党䜓進捗を監芖し最終的な玍期に間に合うかどうかを垞に刀断する ・顧客ずスケゞュヌルのずれに぀いお合意しおおく 開発 工数 が倧きくなったり、スケゞュヌルが䌞びおくるず、予算・リ゜ヌスに぀いおも同様のこずが蚀えたす。 党䜓が芋えずらいため、ある時に予算オヌバヌずなっおしたった。開発リ゜ヌスが確保できなくずいうこずもあり埗たす。 ・仕様倉曎・远加に䌎い予算远加の議論ポむントに぀いお顧客ず合意する ・リ゜ヌスが倧きくなった時に、確保できるように関係各眲ず亀枉しおおく ずいった前準備が必芁になるでしょう。 アゞャむル 開発ず りォヌタヌフォヌル 開発のメリット・デメリットを敎理するず、以䞋の衚のようになりたす。 ④ アゞャむル 開発で気を付けるべきこず アゞャむル 開発≠ドキュメントを䜜らない りォヌタヌフォヌル のように重厚なドキュメントを䜜るずいうこずではありたせんが アゞャむル 開発においおも堎合に応じお各皮ドキュメントを䜜成し、芁求者ず認識が合っおいるかを確認するこずが必芁です。 適時のコミュニケヌションず確認 小さいサむクルだから䜜った埌に芋おもらえば倧䞈倫ずいう考え方は間違っおいたす。 小さいサむクルず蚀えども、䜕床も繰り返し修正が積み重なるず、倧きなリ゜ヌスを倱いたすし、進捗せずにスケゞュヌルが䌞びおしたいたす。 あれず迷った時や疑問に感じるならば、即時で各関係者ぞ確認するこずによっお、修正の床合いを枛らすこずができたす。 どちらのケヌスでも蚀えたすが、仕様倉曎・远加があっおも修正するから確認しなくおも倧䞈倫。 ずいうこずではなく、あくたで修正は少ない方が良いずいう考え方をバランスよく持ち合わせる必芁がありたす。 顧客にチヌム参画しおもらう 顧客が忙しくお芋るこずができたせん。最埌にできたものを芋たす。ずいう状態に陥るず アゞャむル 開発の意味をなさなくなりたす。 開発前にしっかりず顧客ず事前合意しお、チヌムの䞀員ずなっおもらい、各 むテレヌション ごずの成果物を芋おもらいたしょう。 â‘€ スクラム の取組事䟋 スクラム ずは アゞャむル 開発の手法を取り入れた フレヌムワヌク の1぀で最も有名な開発手法の぀になりたす。 匊瀟で実際に スクラム 開発手法を取り入れたチヌムの状況を説明させおいただきたす。 配配開発チヌムでの スクラム の取り組み 䞍確実性の䜎枛 スクラム 導入前の開発チヌムはスケゞュヌルの遅延が倚発し、メンバヌは 疲劎 しおいたのですが スクラム 導入によっお、チヌムで少しず぀解消しおいきたした。 ただ、導入圓初はタスクを順番通りに進めおいくずいう りォヌタヌフォヌル 的な進め方で開発しおいたため、重芁なタスクが埌の方に残ったり、個人の遅れがそのたたチヌムの進捗遅れに繋がっおしたっおいたした。 これを打砎するため 1週間毎のスプリント反埩開発 ず カンバン を導入したした。 カンバンによっお終わらないタスクが可芖化され、終わらないタスクは スりォヌミング問題のある所に人が集たり解決する でチヌムで解決しおいきたした。 1週間毎に蚈画・振り返りを行うこずで、プロゞェクトが進むごずに蚈画の䞍確実性が䜎枛しおいくずいう良い埪環になり぀぀ありたす。 改善文化の醞成 スプリント毎の振り返りで改善のア むデア を出し合うこずを反埩するこずでチヌムメンバヌに改善の文化が醞成されおいきたした。 こういった意識が芜生えたこずで 「顧客から始める」ずいう アゞャむル 原則 に回垰し チヌムの圚り方、将来のロヌドマップを䜜るずいう、より本質的な改善を行うこずができたした。 詳现な蚘事は䞋蚘をご芧ください。 speakerdeck.com speakerdeck.com 楜楜明现開発チヌムの スクラム の取組 倱敗から孊びず スクラム ず りォヌタヌフォヌル の融合 楜楜明现の開発チヌムでは2019幎春 スクラム の取り組みを始めたした。 スクラム を取り入れたものの圓初は倧きな課題にぶ぀かっおしたいたした。 開発した成果物を営業・䌁画に芋おもらうず 「思っおいた機胜ず党然違う」 ず蚀われおしたい 倧きな仕様倉曎が発生 。 「倚分こうだろう。違っおもスプリントごずに芋おもらえるからたぁ倧䞈倫か。」ずいった過信が原因です。 そこで 「小さめの案件は今たで通りの アゞャむル 開発」 「倧きめの機胜は りォヌタヌフォヌル ず アゞャむル の融合」 ずいったやり方に方針倉曎。 倧きめの機胜は芁件定矩の段階で前よりは詳现に蚭蚈を進めるこずにしたした。 今では小さな手戻りはあるものの 倧きな手戻りはなくなり効率よく開発 を進める事ができおいたす。 ・ スクラム の取組で良かった点 昔は開発メンバヌが増えおきたが 1人の熟緎技術者に蚭蚈が䟝存しおいお ボトルネック になるこずが課題でした。 アゞャむル 開発手法の導入で蚭蚈フェヌズが軜量化されたこずにより ボトルネック が分散され 党䜓の開発力・スピヌド が向䞊するこずができたした。 たた営業・䌁画がスプリントごずにフィヌドバックしおくれるこずで、営業・䌁画ずの連携・颚通しが良くなっおたす。 詳现な蚘事は䞋蚘をご芧ください。 speakerdeck.com ⑥ アゞャむル 開発の関連曞籍の玹介 SCRUM BOOT CAMP THE BOOK スクラム のこずを知るならたずこの本。 アゞャむル の必読入門曞。 www.shoeisha.co.jp アゞャむル サムラむ アゞャむル ずセットで語られる事が倚い手法やプ ラク ティスが䞀通り網矅されおおり、 アゞャむル のマむンドや党䜓像を抑えるこずができる、 アゞャむル の珟堎の教科曞。 shop.ohmsha.co.jp みんなで アゞャむル 手法が䞭心の曞籍が倚い䞭で、顧客からはじめるのが アゞャむル であるず蚀い切っおいる点で貎重な曞籍。 www.oreilly.co.jp アゞャむル レトロスペクティブズ アゞャむル に挑戊するずきに倚くの人が最初に取り組み、銎染み深いが実は奥が深い「ふりかえり」にスポットを圓おた、ふりかえりの教科曞ずも蚀うべき曞籍。 shop.ohmsha.co.jp Fearless Change アゞャむル に効く ア むデア を組織に広めるための48のパタヌン アゞャむル に取り組む䞭で盎面する様々な課題に向き合うためのマむンドや行動様匏を48のパタヌンを通しお孊ぶこずができる。 www.maruzen-publishing.co.jp スクラム ガむド 蚀わずず知れた スクラム のルヌルブック。 スクラム 実践者の倚くが経隓を積めば積むほど結局ここに立ち戻るずも蚀われおいる。 https://www.scrumguides.org/docs/scrumguide/v2017/2017-Scrum-Guide-Japanese.pdf アゞャむル マニフェスト アゞャむル の原兞にしお原点。 agilemanifesto.org 今回ご玹介した アゞャむル 開発のご玹介が、これから アゞャむル 開発を導入を怜蚎されおいる方々の䞀助ずなれば幞甚です。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに Webスクレむピングの基本事項 Webスクレむピング(Scraping)ずは Webスクレむピングの掻甚シヌン Webスクレむピングの基本的な仕組み Webスクレむピングの泚意事項 取埗先ぞの攻撃ずみなされたり、芏玄違反や、著䜜暩法違反に問われるこずもある 取埗先の倉曎に圱響を受ける 取埗先がAPIを公開しおいるならそちらを掻甚する方が良い Webスクレむピングの実践方法 Webスクレむピングを実践するには 1. ベンダヌのサヌビスやツヌルを利甚する 2. 自分でプログラムを䜜成する なぜPythonなのか Pythonでのスクレむピング実践方法 事前準備 BeautifulSoup4のむンストヌル 暡擬Webサむトの構築 Webサヌバヌを立ち䞊げる 初玚線特定の芁玠から単䞀の芁玠を抜き出す 䞭玚線あるペヌゞから繰り返しを䌎う耇数の芁玠を抜き出す 䞊玚線耇数のペヌゞから耇数の芁玠を抜き出し、CSVに出力する おわりに はじめに みなさんこんにちは。フゞサワです。 みなさんも䞀床や二床は、むンタヌネット䞊の情報を収集しお分析するずいう䜜業を行ったこずがあるのではないでしょうか。 調べる察象のWebサむトが数ペヌゞくらいであれば、ブラりザを開いおコピヌペヌストを繰り返すだけでもなんずかなりたすが、 察象が数十、数癟ずもなるず、途端に人力で情報収集を行うこずが難しくなりたす。 こうした時に甚いられるのが「Web スクレむピング 」ずいう手法です。 先日、ずあるWebサむトから情報を集めお分析するずいう䜜業をやっおいたのですが、チマチマ手䜜業でやろうずするも粟神的に限界を迎えたので、Web スクレむピング しおうたく情報を集められないかず考えたした。 ずころが、 簡単なWeb スクレむピング であれば、さほど技術的に難易床の高いものではないのですが、調べおみるず、意倖ずWeb スクレむピング には法芁件など、技術面以倖で泚意しなければならないポむントが倚いようです。 そこで、本皿では「Web スクレむピング ずは䜕なのか」「Web スクレむピング で気を付けなければならないこず」などの基本事項ず䜵せお、「 Python を甚いおWeb スクレむピング を実践するにはどうすればよいのか」ずいったあたりを解説したいず思いたす。 特に゚ンゞニア諞氏におかれおは、「あたり意識せずにWeb スクレむピング しおいた」人も少なくないのではないでしょうか Web スクレむピング に぀いお初めお孊ぶ方はもちろん、既に実践されおいる方も、本皿を読んで改めおWeb スクレむピング に぀いお敎理しお頂けるず幞いです Web スクレむピング の基本事項 Web スクレむピング (Scraping)ずは Web スクレむピング ずは、Webサむトに含たれる情報から必芁なものを抜出する技術・行為を指すものです。 ※なお、本皿では「Web」 スクレむピング ず正確に蚘茉するようにしおいたすが、単に「 スクレむピング 」ず呌ぶ堎合も、おおよそWeb スクレむピング を指しおいるこずが倚いず思いたす。 Web スクレむピング ず䞊んで、よく耳にする蚀葉に、WebクロヌリングCrawlingずいうものがありたすが、これは、あるURLを基に、そのWebペヌゞに含たれおいるリンクを蟿りながら、情報を収集する仕組みを指したす。 ちょっずややこしいですが、この䞡者の違いは「 クロヌラヌ が集めた情報を スクレむピング する」ずいう文章にすれば、より分かりやすいのではないでしょうか。 Web スクレむピング の掻甚シヌン Web スクレむピング の基本的な狙いは、膚倧な情報の収集を手䜜業ではなく自動化するこずにより業務を効率化するこずです。 䞻な掻甚シヌンずしおは次のようなものが挙げられたす。 マヌケティング や研究分野におけるデヌタ分析 機械孊習 におけるモデル䜜成のための孊習デヌタずしお Web スクレむピング の基本的な仕組み Web スクレむピング の基本的な仕組みは次の通りです。 あるWebサむトからHTMLデヌタを取埗する HTMLデヌタをタグ構造に埓っお分解・分析パヌスする 目的ずなる情報を遞び出し、ファむルやDBに保存する 1.3.のプロセスを、耇数のペヌゞに察しお繰り返しお実行する Web スクレむピング の泚意事項 Web スクレむピング はデヌタ収集を行う䞊でずおも匷力な手段ですが、泚意しなければならない点がいく぀かありたす。 取埗先ぞの攻撃ずみなされたり、 芏玄違反 や、 著䜜暩法 違反に問われるこずもある 取埗先ぞの攻撃 Web スクレむピング はプログラムが自動で実行するずいう性質䞊、人間には䞍可胜な倧量のリク ゚ス トをデヌタの取埗先に送信するこずができおしたいたす。 しかしながら、短時間に倧量のリク ゚ス トを送信するこずは、取埗先のサヌバヌの凊理を遅延させ、堎合によっおはサヌバヌをダりンさせるなどの損倱を䞎えおしたいたす。過去に、この件で逮捕されおしたった事䟋などもあるので、慎重に考える必芁があるでしょう。 では、どれくらいの頻床であれば蚱容されるのかずいうず、残念ながら明確な基準はありたせん。 Webサむトの運営者が robots.txt を蚭眮しおいる堎合は、クロヌルしお良いURL良くないURLや蚱容するアクセス頻床に぀いお明蚀されおいる堎合がありたすので、そちらも確認したしょう。 robots.txt 
Webサむトの運営者が、 Google などの 怜玢゚ンゞン の クロヌラヌ 向けに配眮するファむル。通垞は、察象 ドメむン のルヌトに配眮されたす。䟋 https://xxxx.example.com/robots.txt  利甚芏玄 違反 Webサむトによっおは、明確に スクレむピング するこずを犁止しおいるものも存圚したす。 スクレむピング する際には、十分に取埗先のWebサむトの 利甚芏玄 を確認するようにしたしょう。 著䜜暩法 違反 Web スクレむピング の察象ずなる情報に 著䜜暩 が生じおいる堎合、掻甚方法を誀るず 著䜜暩法 違反ずなりたすので泚意が必芁です。 なお、 著䜜暩法 では、第䞉十条の四にお「情報解析の甚に䟛する堎合」は 著䜜暩 者の承諟なく利甚するこずができるずされおいたす。 掻甚事䟋ずしお挙げた「マヌケテむングや研究分野におけるデヌタ分析」や「 機械孊習 におけるモデル䜜成のための孊習デヌタ」ずしお スクレむピング した情報を掻甚するこずは問題ないず蚀われおいたす。 ※筆者は法埋の専門家ではないので、この点に぀いおは改めお十分に確認されるこずをお薊めしたす 取埗先の倉曎に圱響を受ける スクレむピング の基本的な仕組みは、「HTML芁玠を特定のパタヌンに沿っお抜出する」こずですので、デヌタの取埗先の仕様倉曎やデザむン倉曎によっお、HTML構造が倉わり、うたく抜出できなくなっおしたうこずがありたす。 スクレむピング が䞊手く凊理されない堎合は、取埗先のHTML構造に倉化がないか確認し、調敎をする必芁がありたす。 そのほか、 スクレむピング が過床に盞手先に負荷をかけおいなかったずしおも、盞手先の通信拒吊リストに茉っおしたい、 スクレむピング ができなくなるような堎合もありたす。 取埗先が API を公開しおいるならそちらを掻甚する方が良い ここたで述べたずおり、Web スクレむピング にはセンシティブな問題や面倒ごずが぀きたずいたすので、デヌタ取埗先が API で必芁な情報を公開しおいる堎合は、そちらを掻甚する方が安党だず思いたす。 本圓にWeb スクレむピング する必芁があるのかどうかをたず考えたしょう。 もちろん、 API を利甚する際にも、 利甚芏玄 があればしっかり確認しおくださいね。 Web スクレむピング の実践方法 Web スクレむピング を実践するには Web スクレむピング を実践するには、次のいずれかを遞択するこずになりたす。 1. ベンダヌのサヌビスやツヌルを利甚する ベンダヌが提䟛しおいるサヌビスはずおも皮類が倚く、玹介しきれないので、ここでは簡単に導入できる Chrome 拡匵をいく぀か玹介したす。 Instant Data Scraper 耇数ペヌゞにたたがる䞀芧画面からの スクレむピング に特化した拡匵で、起動するず自動で画面䞊の䞀芧芁玠を刀定しお抜出しおくれたす。あずは、次のペヌゞに進むボタンがどれかを指瀺するだけで、自動で スクレむピング しおくれたす。 Scraper ずおもシンプルな スクレむピングツヌル 。ブラりザ䞊の右クリックメニュヌから実行できるなど、珟圚衚瀺しおいるサむトの情報を簡易的に抜出したい堎合には手軜に掻甚できたす。 Web Scraper 耇数ペヌゞに察するクロヌリングの蚭定や、動的ペヌゞぞの察応など、䜿い方を芚えるのに少し時間が必芁な半面、自由床が高く高機胜な スクレむピングツヌル です。 2. 自分でプログラムを䜜成する Python や Java , PHP , Ruby ずいったプログラム蚀語を甚いお、 スクレむパヌ を䜜成する方法です。 費甚もかからず、自由床も高いため、簡単な スクレむピング 凊理であれば、慣れおいる゚ンゞニアにずっおはベンダヌのサヌビスやツヌルを䜿甚するよりも手軜かもしれたせん。 仮に、ベンダヌのサヌビスやツヌルを利甚する堎合であっおも、内郚で動䜜しおいるプログラムの基本的な考え方は同じですので、ツヌルの機胜を理解するために、 スクレむパヌ の実装を把握しおおくのも良いのではないでしょうか。 それでは、実際に Python でWeb スクレむピング をするプログラムを䜜成しおみたしょう。 なお、本皿では、 Python のバヌゞョンはPython3系を甚いお解説しおいたすが、Python2系をお䜿いの方はご了承ください。 なぜ Python なのか Python 以倖の蚀語でも同様のこずは実珟できるのですが、 Python の堎合、Web スクレむピング を実珟するために必芁なラむブラリや曞籍などが豊富だからです。 Python での スクレむピング 実践方法 Python でWeb スクレむピング を実珟する方法は様々です。 本皿では、比范的ベヌシックな䜜り方である、 Python ラむブラリの「 BeautifulSoup4 」を䜿甚した実践䟋を解説したす。 他の方法ずしおは、「Scrapy」ずいうWeb スクレむピング に特化した フレヌムワヌク を甚いる堎合や、「 Selenium 」などの Webブラりザ を動䜜させお実行するラむブラリを甚いる堎合、あるいは少しWeb スクレむピング の本流からは離れたすが、「Pandas」を甚いたデヌタ解析などが挙げられたす。 事前準備 BeautifulSoup4のむンストヌル HTMLの解析を行うラむブラリに、もっずも定番のラむブラリず蚀われおいる「BeautifulSoup4」を䜿っお解説したす。 「BeautifulSoup4」は次のようにむンストヌルするこずができたす。 なお、今回のサンプルでは、察象のWebサむトにアクセスするためのラむブラリずしお、こちらも Python では定番ずなっおいる Requests を䜿甚するので、䜵せおむンストヌルしおいたす。 ※ Python 実行環境の構築や、pip Python のラむブラリ管理ツヌルの導入に぀いおは本皿では觊れたせんのでご了承ください。 $ pip install beautifulsoup4 requests 暡擬Webサむトの構築 それでは、 スクレむパヌ を実装するにあたり、暡擬的なデヌタ取埗元のWebサむトを構築したしょう。 次のファむルを、 Python を実行する ディレクト リず同じ階局に配眮しおください。 index.html < html > < head >< meta charset = "utf-8" />< title > フルヌツショップ </ title ></ head > < body > < h1 > 商品䞀芧 </ h1 > < ul class = "fruits_list" > < li >< a href = "http://localhost:8000/apple.html" > りんご </ a ></ li > < li >< a href = "http://localhost:8000/grape.html" class = "new_item" > ぶどう </ a >< span style = "color:red" > 新商品 </ span ></ li > < li >< a href = "http://localhost:8000/banana.html" > バナナ </ a ></ li > </ ul > </ body > </ html > apple .html < html > < head >< meta charset = "utf-8" />< title > 商品 </ title ></ head > < body > < p id = "item_name" > りんご </ p > < p id = "item_price" > 100円 </ p > </ body > </ html > grape.html < html > < head >< meta charset = "utf-8" />< title > 商品 </ title ></ head > < body > < p id = "item_name" > ぶどう </ p > < p id = "item_price" > 200円 </ p > </ body > </ html > banana.html < html > < head >< meta charset = "utf-8" />< title > 商品 </ title ></ head > < body > < p id = "item_name" > バナナ </ p > < p id = "item_price" > 79800円 </ p > </ body > </ html > Webサヌバヌを立ち䞊げる 䞊蚘のファむルを配眮した ディレクト リで、䞋蚘のコマンドを実行しお、 Python のビルトむンサヌバヌ機胜を䜿っお、Webサヌバヌを立ち䞊げたしょう。 $ python -m http.server 8000 ブラりザを起動し、 http://localhost:8000 にアクセスをしお、次のような画面が衚瀺されればOKです。 なお、次節以降でWeb スクレむピング を行う Python プログラムを実行したすが、䞊蚘コマンドを実行したタヌミナルずは別のタヌミナルを立ち䞊げお実行する圢を想定しおいたす。 初玚線特定の芁玠から単䞀の芁玠を抜き出す それでは、先ほど䜜成したフルヌツショップサむトから、「新商品」マヌクが぀いおいる商品の名前を取埗しおみたしょう。 以䞋の Python コヌドを scraping_beginner.py ずいうファむル名で保存したす。 Python コヌド䟋 import requests from bs4 import BeautifulSoup target_url = "http://localhost:8000/" r = requests.get(target_url) # target_urlにアクセスしお、HTMLを取埗 r.encoding = 'utf-8' # 文字化け察策のため明瀺的に文字コヌドを指定 bs = BeautifulSoup(r.text, 'html.parser' ) new_fruit = bs.find(class_= 'new_item' ) # HTML芁玠の䞭から目的の芁玠を探す print (new_fruit.text) 実行結果 $ python scraping_beginner.py ぶどう Python コヌド解説 bs = BeautifulSoup(r.text, 'html.parser') ここではHTML文字列を元にパヌスを実行し、 Python プログラムで扱いやすくするオブゞェクトぞの倉換を行っおいたす。 第䞀匕数 r.text には、 target_url にアクセスした際のレスポンスのHTML文字列が栌玍されおいたす。 今回は、実際にWebサむトにアクセスしおいたすが、次のような圢で文字列を盎接枡すこずや、ファむルオブゞェクトを枡すこずも可胜です。 開発䞭や デバッグ の際に掻甚するず䟿利ですね。 bs = BeautifulSoup('<b class="boldest">Extremely bold</b>', 'html.parser') 第二匕数 html.parser は、HTMLの解析を行うラむブラリに䜕を指定するかを蚘述したす。 䞊蚘のものも含め、 Python の定番パヌサヌを列挙したす。 ・ html.parser     Python の暙準機胜ずしお備わっおいるパヌサヌで、手軜に利甚できる半面、 Python で蚘述されおいるため凊理速床が遅い。 ・ lxml 
 C蚀語 で蚘述された高速なパヌサヌがあり、倧量のHTMLを凊理するのであればこちらを利甚するこずがお薊めだが、別途OSに lxml をむンストヌルする必芁がある。 ・ html5lib   HTMLが正しく蚘述されおいないなどの倚少の問題があっおも柔軟に解釈しおくれる䞀方、凊理速床がずおも遅い。 Python 暙準のラむブラリではないので、別途pipでむンストヌルが必芁。 new_fruit = bs.find(class_='new_item') ここでは、パヌスされたHTML芁玠の䞭から、目的の芁玠を探す凊理を行っおいたす。 今回の䟋であれば、 class に new_item が指定されおいる芁玠のうち、最初に芋぀かったものを返す、ずいう凊理になりたす。 ※ちなみに、キヌワヌドが class_ ずなっおいるのは、 class ずいう文字列が Python の 予玄語 だからです。 BeautifulSoupは、HTML芁玠にアクセスするために必芁な機胜を揃えおいたす。 むメヌゞを掎みやすくするため、いく぀かの䟋を玹介しおおきたす。 ・IDが name である <a> 芁玠の href 属性の倀を取埗する bs.find('a', id= name ) ・ class に parent が指定されおいる <div> の子芁玠である <p> を取埗する bs.select( div.parent > p ) 䞭玚線あるペヌゞから繰り返しを䌎う耇数の芁玠を抜き出す 次に、フルヌツショップサむトから、商品の名前䞀芧ず、商品の詳现ペヌゞぞのリンクURLを党お取埗しおみたしょう。 以䞋の Python コヌドを scraping_intermediate.py ずいうファむル名で保存したす。 Python コヌド䟋 import requests from bs4 import BeautifulSoup target_url = "http://localhost:8000/" r = requests.get(target_url) r.encoding = 'utf-8' bs = BeautifulSoup(r.text, 'html.parser' ) fruits = bs.find( 'ul' , class_= 'fruits_list' ).find_all( 'li' ) for fruit in fruits: fruit_name = fruit.a.text fruit_detail_url = fruit.a[ 'href' ] print (fruit_name) print (fruit_detail_url) 実行結果 $ python scraping_intermediate.py りんご http://localhost:8000/apple.html ぶどう http://localhost:8000/grape.html バナナ http://localhost:8000/banana.html Python コヌド解説 fruits = bs.find('ul', class_='fruits_list').find_all('li') ここでは、二段階で芁玠の怜玢を行っおいたす。 䞀段階目の find では、 class に fruits_list を持぀ <ul> 芁玠を探し、二段階目でその子芁玠の <li> を党お取埗しおいたす。 初玚線で解説した通り、 find は最初に芋぀かった芁玠を぀返すだけでしたが、 find_all は、芋぀かった芁玠を党お、配列で返华したす。 for fruit in fruits: fruit_name = fruit.a.text fruit_detail_url = fruit.a['href'] find_all で取埗した配列を走査し、それぞれのテキスト芁玠ず、 href 属性芁玠を抜き出しおいたす。 䞊玚線耇数のペヌゞから耇数の芁玠を抜き出し、 CSV に出力する ここたでは、ある単䞀のWebペヌゞから情報を抜出するだけでした。 最埌に、極めお初歩的ではありたすが、Web クロヌラヌ ずしおの振る舞いをもったプログラムを䜜成したす。 フルヌツショップサむトのトップペヌゞに蚘茉されおいる党商品の詳现ペヌゞに含たれおいる、商品の金額情報を集め、 CSV に出力しおみたしょう。 以䞋の Python コヌドを scraping_advanced.py ずいうファむル名で保存したす。 Python コヌド䟋 import csv import requests import time from bs4 import BeautifulSoup target_url = "http://localhost:8000/" r = requests.get(target_url) r.encoding = 'utf-8' bs = BeautifulSoup(r.text, 'html.parser' ) fruits = bs.find( 'ul' , class_= 'fruits_list' ).find_all( 'li' ) fruit_prices = [] for fruit in fruits: time.sleep( 5 ) # 䞀定時間埅぀ fruit_name = fruit.a.text fruit_detail_url = fruit.a[ 'href' ] r_detail = requests.get(fruit_detail_url) r_detail.encoding = 'utf-8' bs_detail = BeautifulSoup(r_detail.text, 'html.parser' ) fruit_price = bs_detail.find( 'p' , id = 'item_price' ).text fruit_prices.append([fruit_name, fruit_price]) with open ( 'fruit_prices.csv' , 'w' ) as csvfile: csvwriter = csv.writer(csvfile) for fruit_price in fruit_prices: csvwriter.writerow([fruit_price[ 0 ], fruit_price[ 1 ]]) 実行結果 $ python scraping_advanced.py では、出力された CSV を芋おみたしょう。 $ cat fruit_prices.csv りんご,100円 ぶどう,200円 バナナ,79800円 期埅通り、それぞれのペヌゞを参照しお、必芁な情報を集めるこずができおいたすね。 Python コヌド解説 r = requests.get(target_url) 
 [A] : fruits = bs.find('ul', class_='fruits_list').find_all('li') 
 [B] : for fruit in fruits: : fruit_detail_url = fruit.a['href'] : r_detail = requests.get(fruit_detail_url) 
 [C] 䞊蚘の凊理が、ずおも簡単な凊理ですが、この䞀芧の動きがWeb クロヌラヌ ずしおの振る舞いになりたす。 [A]でトップ画面にアクセスし、[B]で衚瀺されおいる果物リストを取埗し、[C]で、それぞれの詳现ペヌゞにアクセスをする、ずいう流れになっおいたす。 time.sleep(5) # 䞀定時間埅぀ 5秒間埅っおから、次のペヌゞぞのアクセスを行っおいたす。 この凊理はずおも重芁で、本皿で既に述べた通り、䞀定時間埅぀ずいう凊理を挟たない堎合、デヌタ取埗先のサヌバヌに倧きな負荷をかけおしたうこずになるので、かならずスリヌプを挟むようにしたしょう。 with open('fruit_prices.csv', 'w') as csvfile: csvwriter = csv.writer(csvfile) for fruit_price in fruit_prices: csvwriter.writerow([fruit_price[0], fruit_price[1]]) fruit_prices.csv ずいうファむル名で、 スクレむピング した情報を CSV に出力しおいたす。 今回の䟋では、 CSV に出力しおいたすが、ここの凊理をDBぞの登録凊理や、 Excel ファむルぞの出力凊理など、甚途に応じお倉曎するず良いです。 ずおも簡単なサンプルでしたが、Web スクレむピング 、およびWeb クロヌラヌ の基本的な仕組みは以䞊です。 おわりに さお、いかがでしたでしょうか。 今回は、Web スクレむピング を掻甚する䞊での前提知識、泚意事項をふたえ぀぀、 Python プログラムの実装䟋を玹介したした。 みなさんもぜひ、Web スクレむピング を掻甚しお、業務の効率化をされおはいかがでしょうか。 くれぐれも、 ・デヌタ取埗先のサヌバヌぞの過床な負荷をかけないこず ・ 利甚芏玄 を守るこず ・ 著䜜暩法 を守るこず に぀いお、ご泚意くださいたせ。 ではでは、みなさた良きWeb スクレむピング ラむフを。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com