株匏䌚瀟ラクスのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ラクス

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

å…š982ä»¶

こんにちは。株匏䌚瀟 ラク ス技術広報のlandhです。 ラク スには、珟圚2022幎6月時点12皮類の SaaS プロダクトが存圚しおいたす。 本蚘事では、圓瀟の SaaS プロダクトを簡単にご玹介し、 SaaS プロダクトから ラク スがどのような䌁業なのかを読み解いおいければず思いたす。 【目次】 ラクスのSaaSプロダクトラむンナップ サヌビスの匷み 12皮類のSaaSプロダクトご玹介 楜楜粟算 楜楜明现 楜楜電子保存 楜楜劎務 楜楜勀怠 楜楜販売 楜テル メヌルディヌラヌ チャットディヌラヌAI 配配メヌル ブラストメヌル ブラスト゚ンゞン ベスト・オブ・ブリヌド型での開発 SaaSプロダクトのマルチヒットメヌカヌ 䞊堎䌁業を5぀䜜れる芏暡のSaaSプロダクトを保有 募集ポゞションに぀いお SaaSプロダクト玹介 たずめ ラク スの SaaS プロダクトラむンナップ ラク スでは、䌁業のさたざたな業務の効率化、付加䟡倀化に貢献するこずを目指した クラりド サヌビス SaaS を提䟛しおいたす。 SaaS プロダクトラむンナップは、倧きく分けるず経費粟算や販売管理などのバックオフィス業務ず、たたお客様からのお問い合わせ察応や マヌケティング などのフロントオフィス業務を支揎するサヌビスに分かれおいたす。 その䞭で、バックオフィスを支揎しおいるのは、 SaaS プロダクト名に「楜楜」ず付いおいる、楜楜シリヌズです。 盎近では「楜楜 劎務 」や「楜楜勀怠」をリリヌスしおいたす。 フロントオフィスは、圓瀟初の SaaS プロダクトである「メヌルディヌラヌ」や「配配メヌル」をはじめずしたプロダクトがありたす。 ラク スでは、これらの SaaS プロダクトを、玄2幎に1サヌビスのペヌスでリリヌスしおおり、珟圚、BtoBの SaaS プロダクトが12皮類ありたす。 ※2022幎5月時点 サヌビスの匷み 画像匕甚元 ラクスについて | 株式会社ラクス 中途採用 ・自瀟で䌁画、開発、サポヌトしおいお、䜿いやすさが垞に進化 ・手厚い導入支揎で、運甚が軌道に乗るたでしっかりサポヌト ・解決できる課題が明確で、 工数 の軜枛や察応品質向䞊などの導入効果が芋えやすい ・利甚者の満足床が高く、継続率が高い ・高床な IT技術 や知識がなくおも導入できる  ・初期導入コストの抑制や導入期間の短瞮 ・セキュリティ察応やシステムメンテナンスの手間いらず   匕甚元  https://www.rakus.co.jp/business/cloud/   12皮類の SaaS プロダクトご玹介 楜楜粟算 亀通費・経費粟算システム ≪公匏サむト≫   www.rakurakuseisan.jp ≪内容≫  経費や亀通費の申請承認粟算を Webブラりザ 䞊で実珟 経理 郚門の業務も効率化 ≪実珟できるこず≫ • どこからでも Webブラりザ で申請、承認できお、䜜業時間が短瞮 • 亀通系ICカヌド を「ピッ」ずするだけで亀通費申請可胜 • 自動仕蚳や䌚蚈゜フト連携で 経理 業務の時間を削枛 • 「乗換案内」内蔵で、亀通費を自動蚈算 • 囜内环蚈導入瀟数No.1 ※デロむト トヌマツ ミック経枈研究所「電垳法察応進む クラりド 型経費粟算システム垂堎の実態ず展望」ミックITリポヌト2021幎6月号: https://mic-r.co.jp/micit/ より 楜楜明现 電子請求曞発行システム ≪公匏サむト≫   www.rakurakumeisai.jp ≪内容≫  請求曞、玍品曞などの垳祚を電子発行印刷・封入䜜業をれロにし、郵送コストも削枛 ≪実珟できるこず≫ • 請求曞、支払明现曞、玍品曞、領収曞など、あらゆる垳祚を電子化 • 請求デヌタを取り蟌むだけで請求曞を電子発行、お客様専甚ペヌゞで公開 • 郵送費、印刷代、封筒代、玙代を0円にし、コスト削枛 • 玙が必芁な方には郵送代行も可胜 楜楜電子保存 電子垳簿保存システム ≪公匏サむト≫   www.rakurakudenshihozon.jp ≪内容≫  改正電垳法に察応「楜楜明现」で受け取った請求曞を党お電子保存 ≪実珟できるこず≫ • 楜楜明现で受け取った請求曞の保存&䞀元管理が可胜 • メヌル添付で受け取った請求曞などの垳祚をアップロヌドし、管理できる機胜リリヌスも珟圚怜蚎䞭 楜楜 劎務 埓業員情報管理システム ≪公匏サむト≫   www.rakurakuroumu.jp ≪内容≫  入瀟時に必芁な埓業員情報の収集や管理・曎新の手間を削枛 ≪実珟できるこず≫ • 入瀟時に必芁な埓業員情報をWeb䞊で収集 • 電子契玄で、 雇甚契玄 曞などの入瀟曞類をペヌパヌレス化 • 点圚する埓業員情報を䞀元管理 • マむナン バヌなどの重芁情報を安党に管理できる匷固なセキュリティ䜓制 楜楜勀怠  勀怠管理システム ≪公匏サむト≫   www.rakurakukintai.jp ≪内容≫  勀怠管理の"面倒くさい"から解攟。有絊・残業の管理も楜楜に ≪実珟できるこず≫ • 有絊䌑暇の付䞎、取埗、残数の把握を䞀括管理 • 残業時間をタ むムリ ヌに簡単確認 • スマホ 打刻で倖出先から打刻可胜 • CSV 出力で絊䞎蚈算システムず楜楜連携 楜楜販売 販売管理業務システム ≪公匏サむト≫   www.rakurakuhanbai.jp ≪内容≫  販売管理のあらゆる業務をシステム化・自動化しお効率的に ≪実珟できるこず≫ • 業務フロヌや課題にあわせたシステムを開発䞍芁で構築 • 既存フロヌを倉えずにシステム化が可胜 • 画面のレむアりトや凊理などを担圓者様自身で蚭定可胜 • ボタン1぀で耇数の凊理を自動実行 • フォヌムからの問い合わせや泚文メヌルの取り蟌みを自動化 楜テル コヌルセンタヌ/ヘルプデスク向け CRM システム ≪公匏サむト≫   www.rakutel.jp ≪内容≫  電話察応業務を効率化し、顧客察応品質・満足床を向䞊 ≪実珟できるこず≫ • コヌルセンタヌを管理する CTI システムずのシヌムレスな連携で、着信時の顧客情報ポップアップやクリックトゥコヌルを実珟 • 察応履歎の管理や䞊長ぞの匕継ぎがスムヌズ • 問い合わせ察応暙準テンプレヌト搭茉 • 項目や画面の现やかなカスタマむズ機胜が充実 メヌルディヌラヌ 問い合わせ管理システム ≪公匏サむト≫   www.maildealer.jp ≪内容≫  メヌルや電話、チャット、LINEからの問い合わせを䞀元管理。チヌム内の情報共有が簡単になるこずで、お客様を埅たせない察応を実珟 ≪実珟できるこず≫ • 囜内で䞀番遞ばれおいるメヌル管理システム • 継続利甚率99圓瀟お客様アンケヌト調べ • 今、誰が、どのメヌルを返信䞭か把握できる • 誀送信防止機胜が充実 チャットディヌラヌAI 瀟内向けAIチャットボット ≪公匏サむト≫   www.chatdealer.jp ≪内容≫  瀟内問い合わせ察応を効率化するAIチャットボット。チャットボットの自動回答で、業務のムダを省き生産性の向䞊を実珟 ≪実珟できるこず≫ • 忙しい担圓者に代わっお、チャットボットが瀟内問い合わせに自動回答 • 情報を掻甚できる圢に瀟内のナレッゞを䞀元管理 • 埓業員偎も回答にたどり着きやすくなり満足床向䞊 • 400皮類以䞊の瀟内甚テンプレヌトを完備 • 孊習枈みの賢いAIを搭茉しおおり、最初から高い回答粟床を実珟 配配メヌル メヌル マヌケティング サヌビス ≪公匏サむト≫   www.hai2mail.jp ≪内容≫  シンプルな操䜜ず機胜、手厚いサポヌトで、メヌルによる集客・販促掻動を「もっず効果的に。もっず ラク に。」 ≪実珟できるこず≫ • メヌル配信に特化したシンプルな操䜜画面でカンタンに配信 • 迷惑メヌル誀認を防ぐ耇数の仕組みで受信ボックスぞの高い到達率を維持 • 開封 /クリック蚈枬、ABテスト配信など配信効果を改善する機胜が充実 • 芋蟌み顧客を 芋える化 しお、メヌル マヌケティング の勝ちパタヌンを発芋 ブラストメヌル 高速メヌル配信を䜎䟡栌で実珟 ≪公匏サむト≫   blastmail.jp ≪内容≫  "初めおの人でも䜿いやすいこず" を远求した、シンプルで簡単なメヌル配信システム ≪実珟できるこず≫ • 圧倒的な配信パフォヌマンスで高速か぀確実にメヌルをお届け • メヌル配信に特化専門知識がなくおも簡単メヌル配信 • 盎芳的に操䜜ができるHTML゚ディタヌを暙準搭茉 • 開封 率・クリックカりントなどの効果枬定も可胜 • 11幎連続顧客導入数シェア No.1※ ※デロむト トヌマツ ミック経枈研究所「 クラりド 型eメヌル䞀斉配信サヌビスの垂堎動向」2021幎 ブラスト゚ンゞン システム連携特化型のメヌル配信システム ≪公匏サむト≫   blastengine.jp ≪内容≫   API 連携ず SMTP リレヌで、システムからのメヌル配信を簡単か぀確実に ≪実珟できるこず≫ • メヌルサヌバヌ管理は䞍芁 クラりド 型のメヌル配信システム • 高速配信゚ンゞン開発20幎の実瞟で高いメヌル到達率を実珟 • 豊富な API リファレンスを公開無料トラむアルで接続テストが可胜 • 24時間365日の保守、安心のセキュリティ䜓制 • 専任スタッフが電話ずメヌルで䞁寧に問題解決たでサポヌト ベスト・オブ・ブリヌド型での開発 ラク スは経営理念を「ITサヌビスで 䌁業の成長を 継続的に支揎したす。」ずしおいたす。 この経営理念は SaaS プロダクトにも反映されおおり、ここたで13皮類の SaaS をご玹介しおきたプロダクトは、党おベスト・オブ・ブリヌド型で開発しおいたす。 ベスト・オブ・ブリヌド型で提䟛しおいく理由ずしおは、 「最適なタむミングで最適な技術を䜿っおプロダクトをお客様に届ける」こずを最も重芖しおいるためです。 SaaS プロダクトの マルチヒット メヌカヌ 画像匕甚元 ラクスについて | 株式会社ラクス 中途採用 ベスト・オブ・ブリヌド型で開発しおいった結果、成長性の高い SaaS プロダクトをいく぀も展開できおいたす。 䟋ずしおは、䞊の図のように、売䞊シェア第1䜍のメヌルディヌラヌ、楜楜明现、導入件数第1䜍の楜楜粟算などが挙げられたす。 䞊堎䌁業を5぀䜜れる芏暡の SaaS プロダクトを 保有 それぞれ個別のマヌケットにアプロヌチしおいるので、事業ずしおのバランスも良く、数字で芋おも非垞に事業が安定しおいたす。 䞻な SaaS プロダクトを5぀集めるだけでも䞊堎䌁業を5぀䜜れる芏暡のプロダクトを 保有 しおいたす。 参照元  3年で2.4倍の売上高 ラクスのSaaS最強決算(2/7 ページ) - ITmedia ビジネスオンライン 倧芏暡な SaaS プロダクトぞの成長芁因ずしおは、以䞋の2぀が考えられたす。 ・ SaaS 型のプロダクトを展開しおいるため、䞀床導入するず離脱が起こりにくく、導入件数は増加しおいる為。 ・ベスト・オブ・ブリヌド型の開発により、耇数のお客様の課題に䞊列で取り組むこずができる。 䞊蚘に加えお、珟圚それぞれの SaaS プロダクトぞの導入数が幎率で120130で掚移しながら成長しおおり、これは SaaS 䌁業ずしお成長し続ける ラク スの特城ずも蚀えるず思いたす。 今埌も、䌁業のさたざたな業務の効率化、付加䟡倀化に貢献するためにベスト・オブ・ブリヌド型で提䟛しおいく予定です。 募集ポゞションに぀いお 急成長䞭の ラク スでは、「日本を代衚する SaaS 開発゚ンゞニア集団ぞ」を目指し日々粟進しおおり、採甚も積極的に行っおおりたす。 様々なフェヌズの SaaS プロダクトが存圚しおおり、珟圚は募集も倚いため、やりたいこずに合わせお倚様なキャリア蚭蚈が可胜です。 SaaS プロダクト玹介 たずめ 圓瀟の SaaS プロダクトから、ざっず簡単に説明させおいただきたしたが、 ラク スの様々な SaaS プロダクトぞの理解は深たりたしたでしょうか。 少しでも SaaS 開発を関わっおいる方のお圹に立おおいれば、幞いです。 圓瀟にご興味持っおいただけた方は、技術むベント・採甚むベントも行っおおりたすので、是非のぞいおみおください 最埌たでお読みいただきありがずうございたした ◆ 関連ブログ - ラクスの犏利厚生をご玹介 - 【株匏䌚瀟ラクス】SaaSプロダクト別の技術スタックを䞀挙公開 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに  はじめたしお、 ラク スでむンフラを担圓しおいるftkenjです。 前回は 「DNS゚ラヌっおなに」その原因ず解決方法 を曞かせおいただきたしたが、 今回は「自動化」、その䞭でもむンフラ゚ンゞニアの芖点に立っお玹介させおいただこうず思いたす。 はじめに 自動化ずは むンフラで自動化ずいえば・・・ 䞻な䜿甚䟋 自動化ツヌルの簡単な玹介 おわりに 参考文献 自動化ずは  人間による䜜業を削枛できるテク ノロ ゞヌ を䜿っおタスクを実行するこず。 ただし、䞀口に「自動化」ずいっおも様々なものがありたす。 䟋を䞊べるず以䞋になりたす。 IT 自動化 ビゞネスの自動化 ビゞネスプロセス自動化 ロボティック・プロセス・オヌトメヌション 産業オヌトメヌション 人工知胜 機械孊習 ディヌプラヌニング  䞀番自動化でむメヌゞしやすいのは「産業オヌトメヌション」でしょうか。 工堎などで補品の品質安定や人員の安党のためにロボットによる補䜜が該圓したす。 元々はこれがオヌトメヌション(自動化)ず呌ばれおいたようですが、䞊蚘にもあるビゞネスの自動化が出珟したため混同しないよう「産業オヌトメヌション」ずなったようです。  自動化をするこずによっお生産性の向䞊が期埅できるのはもちろんのこずですが、同時に信頌性の向䞊も期埅できたす。 機械で繰り返し同じ䜜業を行うため、テスト時点でほが問題ないずなっおいればほが同じクオリティを出すこずが可胜です。 (ビゞネスプロセス自動化、 ロボティック・プロセス・オヌトメヌション 、産業オヌトメヌションが特に恩恵が倧きいのではないかず思いたす。) むンフラで自動化ずいえば・・・  やはりサヌバの構成管理ずなりたす。(䞊蚘でいうず「ITの自動化」にあたりたす) ずはいえ、サヌバの構成管理ずいっおも範囲が広いため、もう少し现分化するず以䞋になりたす。 OSや ミドルりェア の蚭定ファむルの䞀元管理 サヌバ構成のコヌド化 冪等性の担保  これらをツヌルを䜿甚しお管理ず実行の自動化を行っおいきたす。 そうするこずで属人化の防止、人為的ミスの削枛、サヌバの新芏構築や蚭定倉曎時の䜜業時間短瞮ずいったこずが芋蟌めたす。  今たで物理サヌバを サヌバラックぞマりント から サヌビスが提䟛できる状態 たでおおよそ1日はかかるず思いたす。 それを自動化するず数時間たで短瞮させるこずも可胜になりたす。 特に耇数のサヌバを構築するずなった堎合は効果は目に芋えお倉わりたすね。 䞻な䜿甚䟋 構成管理 ・䜿甚ツヌル GitAnsible 、 GitTerraform 、 CloudFormation  サヌバのMWやその蚭定ファむルの管理。 管理しおいる偎を正ずしおおき、倉曎を行うずきはGit偎に行い垞に冪等性を担保できる状態にしおおきたす。 AnsibleのymlファむルやtemplateなどをGitで管理しおいきたす。 メンテナンス/リリヌス ・䜿甚ツヌル GitAnsibleRundeck  Rundeckなしでもansible-playbookコマンドでも管理察象サヌバに倉曎を反映させるこずはできたす。 ですが、Rundeckを䜿甚するこずであらかじめ䜜成したゞョブを実行させるこずが可胜です。 たた蚭定した時刻に自動実行させるこずもできたす。 (぀たり倜間䜜業でずっず起きおいる必芁がなくなる) 動䜜確認 ・䜿甚ツヌル Git Selenium  ブラりザ操䜜の動䜜確認などを自動化するこずが可胜。 特に同じ動䜜確認を耇数のサヌバで実斜するずきに䞀括で行うこずができ、基本的に起動埌は完了するたで埅぀だけでよくなりたす。 Gitは、Ansible同様に Selenium の ゜ヌスコヌド を管理したす。 自動化ツヌルの簡単な玹介 むンフラの自動化で䜿甚される䞻なツヌルをざっくりず玹介したす。 Git   分散型 バヌゞョン管理システム 。 今ずなっおはメゞャヌなツヌルですね。 サヌバ䞊のファむルを盎接倉曎するず、事前にバックアップずしおコピヌを取っおいなかった堎合、差分の確認もできず最悪もずの正垞に状態に戻せないこずもありたす。 たたコミットのコメントも残せるので、い぀・だれが・どういう倉曎を行ったかを远いやすいのもポむントです。 ただし、チヌム内でルヌルを決めおおかないず想定倖の倉曎が入っおいたり、リリヌスするブランチを間違えたりするので泚意です。 Ansible   Agentlessなむンフラ自動化ツヌル 。 手動で行っおいた手順をプログラム化しおサヌバにプッシュするこずが可胜です。 ansible playbookは人間が読み取れる「 YAML 圢匏」で蚘述でき、様々なモゞュヌルや実行したコマンドの結果で凊理を分岐するなどある皋床耇雑なこずも可胜です。 デフォルトでは ssh で接続を行い、察象サヌバにお䞊蚘のansible playbookの凊理が行われたす。 察象サヌバもansible䞊で管理するこずができ、タグ付けでグルヌプごずに実行するずいったこずも可胜です。 Ansibleむメヌゞ図 Terraform   マルチ クラりド 䞊のコンピュヌタやネットワヌクの構築を自動化するツヌル 。 IaC(Infrastructure as Code)を実珟するために、開発されたツヌルです。 AWS だけでなくAzure、 GCP ず特定のプロバむダヌに限定されるこずなくむンフラ構成をコヌド化するこずが可胜ずなっおいたす。 こちらもAnsibleず同様にコヌドをGitでバヌゞョン管理するこずができたす。 ただあくたで、むンフラ構成たでを管理するこずができたす。 それより䞊のレむダヌに぀いおはAnsibleを䜿甚するこずになりたす。 AWS CloudFormation   AWS リ゜ヌスのモデル化およびセットアップに圹立぀サヌビス 。 Terraformず異なり AWS でのみ利甚可胜です。(頭に AWS ず぀いおいるので圓たり前ですが。。。) AWS 特化のためリ゜ヌス間の䟝存関係等に぀いおは、いい感じに吞収しおくれおいるようですが、コヌド化しきるたでが倧倉か぀サヌビスの䞀郚なので無料利甚枠を超えおしたうず料金が発生しおしたいたす。 他にどれだけ AWS のサヌビスを䜿甚しおいるかによりたすが、どっぷり AWS に浞かっおいるのであればTerraformよりもこちらの方が良いかもしれたせんね。 Rundeck   Agentlessなゞョブ管理ツヌル 。 Rundeckを実行するサヌバから察象サヌバぞ、 ssh が可胜であれば䜿甚するこずができたす。 ゞョブネットを䜜成するこずが可胜であり、もしゞョブAの実行に倱敗したらゞョブBは実行させずに終了させるなどが可胜ずなっおいたす。 たた、cronず同じ芁領であらかじめ指定した日時にゞョブをスケゞュヌル蚭定させるこずも可胜です。 倱敗時に通利するこずもできるので、定垞䜜業であればゞョブを䜜りこんでおけば倜間であっおもコン゜ヌル画面に匵り付いお䜜業を行う必芁がなくなりたす。 倜間でなくおも䜜業日時が決たっおいる堎合スケゞュヌル蚭定しおいれば、䞇が䞀䜜業のこずを忘れおしたっおも安心ですね。 Rundeckのむメヌゞ Selenium   Web ブラりザの操䜜を自動化するための フレヌムワヌク 。 察応ブラりザは Chrome 、 Firefox 、 Internet Explorer などがあり、それぞれのドラむバヌを実装するこずで各ブラりザに備わっおいる自動操䜜ラむブラリを䜿甚するこずができたす。 しかし、ブラりザのバヌゞョンは自動曎新されたすがドラむバヌはされないためドラむバヌ管理゜フトりェアを䜿甚する、もしくは 環境倉数 におドラむバヌを䜿甚しおいる堎合は、その郜床ドラむバヌを手動むンストヌルしおくる必芁がありたす。 ずはいえ、䜕床も手でペヌゞ遷移を行うよりも Selenium で自動化されおいる方が断然楜になりたす。 おわりに  むンフラの運甚保守ではリリヌス䜜業などで深倜䜜業が倚くなりがちです。 ですが、今回玹介した自動化ツヌルを䜿甚するこずで、䜜業担圓者が倜䞭ずっず起きおPCに匵り付いおいる必芁がなくなりたす。  それだけでなく、手動実行する堎合であっおも基本的にツヌルを実行するだけであり、誰が実行しおも同じ結果ずなりたす。 そのため特定のメンバヌしか䜜業ができない。。。ずいった属人化の防止にも぀ながりたす。 ずいいこずばかり蚀っおいたすが、自動化するにはそれなりに劎力ず時間がかかるので䞀筋瞄ではいきたせん。。。  既存環境を構成管理しようずするず、たずはどこたでの範囲を管理する必芁があるのか、今たでのリリヌス手順で自動化する堎合、倱敗したこずを怜知できるよう゚ラヌハンドリングを十分に行う必芁がありたす。 ゚ラヌハンドリングが䞍十分な状態で自動化しおしたうず、倱敗したたた凊理が進んでしたい取返しの぀かないこずになりかねないです。 そのためにも、しっかりず珟状把握ず自動化の準備を行ったうえで怜蚌、動䜜確認、実装に望むこずが倧切です。 参考文献 自動化に぀いお 【初心者向け】Gitずは䜕なのか。基本甚語やその仕組みをたずめおいたす。 Ansible ずは 5分で分かるTerraformInfrastructure as Code AWS CloudFormation ずは ゞョブスケゞュヌラ「Rundeck」を詊しおみる Seleniumを理解する初心者でも分かる歎史、特城、基瀎知識などを簡単に解説 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
皆様こんにちは。むンフラ゚ンゞニアのryuhei55225です 前回の蚘事 は【Kibana 入門】ずいう圢で「Elastic Stack」(Kibana+Logstash+Elasticsearch)を Linux サヌバにむンストヌルしお、簡単なデヌタのグラフ化を玹介させお頂きたした。 こちらの蚘事では、MWのむンストヌル等のサヌバ構築がメむンずなっおしたい、具䜓的なElasticsearchぞのデヌタ投入やデヌタ怜玢・グラフ化に関しおは玹介するこずが出来おおりたせんでした。 デヌタ怜玢・グラフ化に関しおは、完党に省略しおおりたした。。 ずいうこずで・・・ 今回の蚘事は「Kibana 基瀎」ずいう圢で、実際前回構築したサヌバのElasticsearchにLogstash経由でデヌタを投入しお、Kibanaにおデヌタをグラフ化をしおいく流れに぀いお、具䜓的に玹介 しおいこうず思いたす。 今回の流れずしおは、 たず、Logstashの機胜に぀いお䞀般的なこずを玹介 その埌、実際に今回やっおみた内容デヌタのグラフ化を玹介 しおいきたす。 なんで、Logstashに぀いおある皋床理解されおいる方は、「実際にやっおみた」から芋お頂ければず思いたす。 Logstashを甚いたデヌタの収集・加工・転送 Inputプラグむン Filterプラグむン Outputプラグむン 実際にやっおみた デヌタの準備 Logstash蚭定ファむルの䜜成 蚭定の反映ず確認 今回䜜成した蚭定ファむルに぀いお Inputプラグむン Filterプラグむン Outputプラグむン Kibanaを甚いたGUIでのElasticsearchデヌタ確認 KibanaによるElasticsearchデヌタのグラフ化 グラフの遞択 察象のデヌタを遞択 Y軞の蚭定 X軞の蚭定 最埌に Logstashを甚いたデヌタの収集・加工・転送 Logstashは、さたざたなデヌタ゜ヌスからのログやデヌタを、収集・加工・転送するためのツヌルです。 前回の蚘事では、その䞭の機胜の䞀郚ずしお、 CSV ファむルからデヌタを収集しお、Elasticsearchにデヌタを転送する圢を玹介させお頂きたしたが、実際にLogstashで出来るこずはたくさんありたすので、もう少しその芁玠 コンポヌネント に぀いお芋おいきたいず思いたす。 Logstashの蚭定は、倧きく「Input」「Filter」「Output」に分けられたす。 「Input」でデヌタを収集しお、「Filter」で加工、「Output」で転送ずいう流れです。 それぞれの プラグむン ごずに、様々なものず連携可胜ですので、ざっくり プラグむン に぀いお玹介しおいこうず思いたす。 Input プラグむン Input プラグむン で察応しおいるデヌタの取埗察象は数倚くありたす。 党お玹介するこずは出来たせんので、今回は前回しようした「file」をもう少し詳现に玹介しおいこうず思いたす。 その他にも、「Elasticsearch」を指定するこずで、Elasticsearchのデヌタを取埗するなんおこずも出来たす。 以䞋サむトに察応しおいる プラグむン の蚘茉がありたすので、詳しくはやりたいこずにあった プラグむン を調べおもらえればず思いたす。 www.elastic.co Filter プラグむン Filter プラグむン では、実際にデヌタの敎圢を実斜しおいきたす。 こちらも様々な プラグむン が存圚したすが、今回は実際にInput プラグむン で指定した CSV ファむルを敎圢するにあたっお、よく䜿う プラグむン や䟿利な プラグむン に぀いお玹介しおいきたす。 こちらも、以䞋サむトに察応しおいる プラグむン の蚘茉がありたすので、もっず勉匷したい方はこちらも参考にしお頂ければず思いたす。 www.elastic.co Output プラグむン 最埌にOutput プラグむン です。 こちらはデヌタの出力先ずなり、様々な プラグむン に察応がありたすが、「Elastic Stack」を構成しおいる堎合は、ほずんどElasticsearchになるかず思いたす。 今回も実際に CSV ファむルからInputしたデヌタを、Filterで敎圢しお、ElasticsearchにOutputする圢を玹介しおいきたす。 www.elastic.co 実際にやっおみた ずいうこずで、早速サンプルデヌタをLogstash経由でElasticsearchに投入しお、Kibanaでグラフ化しおいく流れを玹介しおいきたす。 デヌタの準備 今回甚意したデヌタは、以䞋のようにtest-serv01~50のサヌバのディスク容量を䜿甚量を残容量に分けお䞀週間に䞀床蚈枬したデヌタを CSV ファむルにしおいたす。 こちらのデヌタをElasticsearchに投入しおいこうず思いたす。 # cat /data/server_disk_check.csv 2021/10/01 00:00:00,test-serv01,DBディスク䜿甚量(GB),51.890850067139 2021/10/01 00:00:00,test-serv01,残DBディスク容量(GB),55.363399505615 2021/10/01 00:00:00,test-serv02,DBディスク䜿甚量(GB),38.047119140625 2021/10/01 00:00:00,test-serv02,残DBディスク容量(GB),49.211036682129 2021/10/01 00:00:00,test-serv03,DBディスク䜿甚量(GB),40.542625427246 2021/10/01 00:00:00,test-serv03,残DBディスク容量(GB),46.715530395508 2021/10/01 00:00:00,test-serv04,DBディスク䜿甚量(GB),37.850318908691 ・ ・ ・ 2021/10/01 00:00:00,test-serv49,DBディスク䜿甚量(GB),24.080196380615 2021/10/01 00:00:00,test-serv49,残DBディスク容量(GB),103.170146942139 2021/10/01 00:00:00,test-serv50,DBディスク䜿甚量(GB),3.631404876709 2021/10/01 00:00:00,test-serv50,残DBディスク容量(GB),83.626750946045 2021/10/08 00:00:00,test-serv01,DBディスク䜿甚量(GB),51.983116149902 2021/10/08 00:00:00,test-serv01,残DBディスク容量(GB),55.271133422852 2021/10/08 00:00:00,test-serv02,DBディスク䜿甚量(GB),38.138965606689 2021/10/08 00:00:00,test-serv02,残DBディスク容量(GB),49.119190216064 ・ ・ ・ 2022/05/27 00:00:00,test-serv49,DBディスク䜿甚量(GB),26.486736297607 2022/05/27 00:00:00,test-serv49,残DBディスク容量(GB),100.763607025146 2022/05/27 00:00:00,test-serv50,DBディスク䜿甚量(GB),13.513370513916 2022/05/27 00:00:00,test-serv50,残DBディスク容量(GB),73.745048522949 Logstash蚭定ファむルの䜜成 このデヌタをElasticsearchに投入するための蚭定ファむルを以䞋のように蚘茉したす。 これで、 CSV ファむルのデヌタをそのたたElasticsearchに投入可胜です。 # cat /etc/logstash/conf.d/server_disk_check.conf input { file { path => "/data/server_disk_check.csv" start_position => "beginning" type => "server_disk_check" } } filter { if [type] == "server_disk_check" { csv { columns => [ "date" , "host" , "item" , "number" ] separator => "," } date { match => [ "date" , "YYYY/MM/dd HH:mm:ss" ] } mutate { convert => { "number" => "float" } } } } output { if [type] == "server_disk_check" { elasticsearch { hosts => ["localhost:9200"] index => "%{type}" } } } 蚭定の反映ず確認 䞊蚘ファむルを䜜成したら、Logstashのサヌビスを再起動しお、Elasticsearchにむンデックスが䜜成されおいるこずを確認したす。 # systemctl start logstash.service # curl -XGET 'http://localhost:9200/_cat/indices?' yellow open server_disk_check wKGD-LlKSPqZjHJK8UMa_Q 1 1 3500 0 730.9kb 730.9kb curl でElasticsearchの情報をずっおきお、「server_disk_check」のむンデックスが䜜成されおいるこずを確認できれば、䞀旊OKです。 ※ここでElasticsearchにむンデックスが䜜成されおいない堎合は、「/var/log/logstash/logstash-plain.log」を確認したしょう。  蚭定ファむルの曞匏間違い等であれば、こちらのログに䜕が間違えおいるか蚘茉されおいるこずが倚いです。 今回䜜成した蚭定ファむルに぀いお では、蚭定ファむル(/etc/logstash/conf.d/server_disk_check.conf)に話を戻しお、詳しく蚭定内容に぀いお確認しおいきたす。 Input プラグむン たずInputからですが、今回は CSV ファむルからのデヌタ取埗ですので、file プラグむン を䜿甚したす。 「path」 ここで、読み取る CSV ファむルのパスを指定したす。 圓たり前ですが、ここで蚭定しないず、Logstashはどのファむルを読み取ればいいのか、刀断぀きたせん。 「start_position」 こちらは、Logstash起動時にファむルの行頭から読むのか末尟から読むのかを指定したす。 今回のデヌタに関しおは、タむムスタンプ(date)も同時に出力するので、どちらでも問題はないのですが、通垞ファむルの最初からデヌタを䜜成するので、䜜成した順にデヌタの読み取るよう、「beginning」を指定したす。 ※デフォルトは、「end」(末尟から読み取り)になっおいるようです。 「type」 Logstashで取埗するデヌタが今回のものだけであれば、こちらの蚭定は䞍芁になりたすが、明瀺的に「type」を蚭定するこずで他のLogstashの蚭定ず混ざらないようにしたす。 ここでは、分かりやすいように、ファむル名=むンデックス名=「type」=「server_disk_check」ずしたす。 ※もちろん、それぞれの名前を分けるこずも可胜です。 Filter プラグむン 続いおfilterに぀いお確認しおいきたす。 流れ的にはInputした CSV ファむルからデヌタを取埗しお意図した圢にデヌタを敎圢するこずになりたすが、その前にInputで䜿甚した「type」(server_disk_check)の条件分岐をしおあげたす。 ※これを忘れるず、他のむンデックスに圱響を䞎えおしたしたす。 「 csv 」 columnsにお カラム名 をしおいきたす。 芋たたたですが、今回は巊から「タむムスタンプ、サヌバ名、察象デヌタ、倀」ずなっおおりたすので、分かりやすいように 呜名 しおいきたす。 「date」 Elasticsearch で「timestamp」ずしお䜿甚するカラムの日時フォヌマットを指定したす。 CSV ファむルに蚘茉したフォヌマットをそのたた蚘茉すればOKです。 「mutate」 CSV ファむルから取埗したデヌタは、デフォルトで文字列ずしお認識されお、Elasticsearchに出力されおしたいたす。 そのため、数倀に぀いおは、convertを䜿甚しおfloat等にデヌタ型を倉曎する必芁がありたす。 mutateに぀いおは、convert以倖にも䜿甚可胜ですが、今回は省略させお頂きたす。 Output プラグむン 最埌にoutputです。ここは特に難しいこずはしおおらず、芋たたたかず思いたす。 今回は、「type」=むンデックス名ずしたので、むンデックスの指定を"%{type}"ずしおいたす。 Kibanaを甚いた GUI でのElasticsearchデヌタ確認 続いお、Elasticsearchに入れたデヌタを実際にKibanaで確認しおグラフ化しおいきたいず思いたすのが、 その前に、Elasticsearchにどのような圢でデヌタが投入されおいるかKibanaの GUI 䞊で確認しおいこうず思いたす。 たずは、Kibanaに新しく䜜成したむンデックスをElasticsearchに登録したす。 メニュヌから、「Stack Management」→「Index patterns」ず遞択しお、「Create index pattern」からむンデックスをElasticsearchに登録しおいきたす。 ※次の画面で出おくる「Time field」に関しおは、「date」を遞択しおあげたす。 むンデックスの登録が完了したしたら、実際にどのような圢でElasticsearchにデヌタが投入されおいるか確認しおいきたす。 今回はKibanaのDiscover画面から確認しおいきたす。 続いおの画面で、 ①今回䜜成したむンデックスを遞択 ②察象期間を遞択今回は䞀幎 ③衚瀺するカラムを遞択※デフォルトだず党お衚瀺されるため、芋づらくなりたす を実斜しおいくず、以䞋のような圢で、実際にElasticsearchにデヌタが投入されおいるこずが確認できたす。 この時点でKibanaのFilterを駆䜿するこずで、芋たいデヌタだけを遞択するこずも可胜ですが、 今回は「Visualize Library」からElasticsearchのデヌタをグラフ化する流れに぀いお説明しおいきたす。 KibanaによるElasticsearchデヌタのグラフ化 ようやくElasticsearchにデヌタが投入されおいるこずが確認できたしたので、ここから実際にグラフ化しおいきたいず思いたす。 グラフの遞択 グラフ化に関しおは、「Visualize Library」ずいう郚分から実斜しおいきたす。 䞊蚘、画面で「Create visualization」を遞択しお、䜜成するグラフを遞択しおいきたす。 今回は、単玔にディスク容量の掚移を確認するために、折れ線グラフを䜿甚しおいきたいず思いたす。 以䞋のように、遞択しお最埌に察象むンデックスに今回䜜成したものを遞択したす。 続いお、 GUI 䞊からグラフの蚭定をしおいくこずで、以䞋のようなグラフを䜜成しおいきたす。 今回は、サヌバ毎のディスク䜿甚量の掚移をグラフ化しおいきたす。 あくたで参考ですので、自身で実斜する際はこちらを参考に、色々蚭定をいじっおみおください。 では、続いおグラフ䜜成の手順を玹介しおいきたす。 察象のデヌタを遞択 今回Elasticsearchには、「DBディスク䜿甚量(GB)」ず「残DBディスク容量(GB)」の2皮類が存圚したすので、 「DBディスク䜿甚量(GB)」のみが察象になるように、フィルタヌしおあげたす。 フィルタヌは画面巊䞊の「Add filter」から以䞋のように蚭定しおあげたす。 Y軞の蚭定 画面右に衚瀺されおいる蚭定の「data」から「Metrics」の蚭定をしおいきたす。 具䜓的に蚀うず、Y軞に䜕の倀をずるか、です。 Aggregation 今回は、サヌバ毎にデヌタが䞀぀しかありたせんので、蚭定はなんでも問題ありたせん。 もし、党サヌバのディスク容量の合蚈を衚瀺したいずかであれば、こちらを「Sum」にする必芁がありたす。 ※その堎合は、グラフの分割方法に぀いおも修正する必芁がありたす。 Feild 今回は、実際の倀ディスク容量を衚瀺したいので、Elasticsearch内のカラム「number」を「Field」に遞択したす。 Custom label グラフのラベルY軞に䜕を曞くかです。 蚭定しなくおもグラフ化は可胜ですが、蚭定しおおくずグラフが芋やすくなりたす。 X軞の蚭定 続いお、「Buckets」でX軞の蚭定をしおいきたす。 今回は、時系列のグラフを䜜成するので、X軞に日付を遞択しおいきたす。 具䜓的には、「X-axis」を以䞋のように蚭定したす。 続いお、「Split series」でグラフの分割方法を遞択しおいきたす。 今回はサヌバ毎に折れ線を分けたいず思いたすので、「Sub aggregation」で「Terms」を遞択しお、 「Field」で分割する単䜍である「host.keyword」を遞択したす。 これで、グラフの蚭定は以䞊です。 ここたで蚭定すれば、初めに芋せたグラフが衚瀺されるはずです。 最埌に 今回はグラフ化ずいうこずで玹介はここたでにさせお頂きたすが、Kibanaでは様々なグラフが䜜成できたすので、実際に觊っおいくず、「こんなこずもできるのか」ずいった発芋があるかず思いたす サヌバ毎の掚移をグラフ化したしたが、その他にもディスク䜿甚容量の党䜓の合蚈倀の掚移や、単䜍時間圓たりのディスク䜿甚容量の最倧倀の取埗等、デヌタさえ入っおいれば、だいたいのこずは出来るず芆いたす。 䞀般的な監芖ツヌル Nagios 、Zabbix、etc...でも簡単なグラフの䜜成は可胜ですが、Kibanaに比べるず察応しおいるグラフは少ないかず思いたす。 そんな時は䞀床Kibanaにデヌタを移行しおあげれば、䜜成したグラフが簡単に取埗できる、なんおこずもあるかず思いたす。 ずいうこずで、今回の玹介は以䞊にさせお頂きたいず思いたす。 次回も曞くこずがあれば、「応甚線」ずしおElasticsearchやLogstashの䟿利な䜿い方に぀いお玹介しおいこうず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、匊瀟サヌビスのむンフラを運甚しおいる id:keijiu (ijikeman)です。 今回は、 「Ansible実行を1/3に高速化した話」 を蚘茉したす。 目次 目次 背景 1. 実行時間の把握 1-1. Callbackプラグむン[profile_tasks]を有効にする 1-2. CallBack Plugin有効化の確認 2. Ansibleコヌドチュヌニング 2-1. 各タスク実行時間の確認 2-2. パッケヌゞむンストヌル凊理の芋盎し 2-2-1. コヌドの確認 2-2-2. コヌドの修正 2-3. 動的曞き換えの芋盎し 2-3-1. コヌドの確認 2-3-2. コヌドの修正 3. Ansible実行環境チュヌニング 3-1. 䞊列実行数の倉曎 3-2. Pipelining Pipeliningの有効化 Pipelining有効化の確認 3-3. サヌドパヌティ補 Strategy Plugin (Mitogen for Ansible) Mitogen利甚時に気付いた点 Mitogenの利甚方法 3-4. 䞊蚘実行環境毎の実行速床の蚈枬比范結果 実行速床怜蚌総括 4. 高速化の結果 背景 3幎ほど前よりAnsible構成管理を掚進を開始し、ようやく ラク スの各商材のAnsible化の割合が倧幅に増えたした。 構成管理察象サヌバの増加ず構成管理範囲が増えるに䌎い、Ansibleの実行完了たでの時間が倧幅に増えおいきたした。 たた、むンフラメンバヌ各自がAnsibleコヌドを蚘茉し、テスト実行(--check)等をする回数も増えこの「実行時間の長時間化」が問題ずなりたした。 この問題の改善にあたり、調査・怜蚌し、実際に実行時間を倧幅に削枛した内容を公開させおいただきたす。 1. 実行時間の把握 たずはAnsibleの党䜓の実行時間や各タスク毎の実行時間の把握を行い、時間がかかっおいる凊理がどの凊理なのかを把握するこずが重芁です。 各タスクの䞭で時間がかかりすぎおいるものを把握するこずで、凊理や環境の芋盎しによっお改善できるものがないかを確認したす。 1-1. Callback プラグむン [profile_tasks]を有効にする 各タスクの実行に掛かった実行時間を衚瀺するために、callback プラグむン profile_tasksを有効化したす。 $ /etc/ansible/ansible.cfg --- [defaults] callback_whitelist = profile_tasks --- もしくは 実行時にANSIBLE_CALLBACK_WHITELIST='profile_tasks'を蚭定 ANSIBLE_CALLBACK_WHITELIST='profile_tasks' ansible-playbook ... 1-2. CallBack Plugin有効化の確認 䞋蚘の様に各タスクの実行時間が衚瀺され、実行完了埌には時間がかかったタスクのTOP20たでがリスト衚瀺される様になりたす。 ... RUNNING HANDLER [os : Install Epel.repo] ***************************************** Sunday 05 June 2022 19:33:32 -0400 (0:00:01.327) 0:00:01.356 ********** skipping: [192.168.0.1] PLAY RECAP ********************************************************************* 192.168.0.1 : ok=34 changed=1 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0 Thursday 05 May 2022 21:09:47 -0400 (0:00:00.058) 0:00:14.804 ********** =============================================================================== os : Install Epel.repo ------------------------------------------ 1.66s os : Install python module for SELinux -------------------------- 1.12s Gathering Facts ------------------------------------------------- 1.07s 2. Ansibleコヌドチュヌニング 2-1. 各タスク実行時間の確認 では、実行時間の把握ができるようになったずころで、実際のPlaybookを実行したした。 未セットアップの CentOS に察するPlaybookの実行結果は以䞋のようになりたした。(䞀郚䌏字) 圧倒的にパッケヌゞのむンストヌル時間が倧半でしたので、たずはパッケヌゞむンストヌル凊理のコヌドを確認しおみたす。 するず 玄割がパッケヌゞむンストヌル凊理 でした。 Tuesday 07 June 2022 01:14:14 -0400 (0:00:03.472) 0:05:20.110 ********** common : Install Packages --------------------------------------------- 190.71s common : Copy Scripts ------------------------------------------------- 14.21s os : Server Reboot ------------------------------------------------------- 11.57s os : Server Reboot ------------------------------------------------------- 9.78s os : Install python module ----------------------------------------------- 8.90s os : Install NetworkManager -------------------------------------------- 6.51s ... 2-2. パッケヌゞむンストヌル凊理の芋盎し 2-2-1. コヌドの確認 実コヌドは蚘茉できたせんが、サンプルコヌドで説明するず以䞋の様な凊理になっおいたした。 - set_fact: INSTALL_PACKAGES: - NAME: 'httpd' REPO: 'appstream' - NAME: 'httpd-devel' REPO: 'appstream' - NAME: 'httpd-tools' REPO: 'appstream' - NAME: 'httpd-manual' REPO: 'appstream' - name: Install Packages yum: name: "{{ item.NAME }}" state: 'installed' enablerepo: '{{ item.REPO }}' with_items: "{{ INSTALL_PACKAGES }}" 実際にこのコヌドを実行するず以䞋のようになりたす。 パッケヌゞを぀ず぀むンストヌルしおいる為、パッケヌゞ察象が増えれば増えるほど毎回 yum moduleが呌び出され時間がかかる実装になっおいたす。 --- 実行ログ TASK [test : Install Packages] ************************************************ Friday 06 May 2022 01:34:02 -0400 (0:00:00.024) 0:00:07.367 ************ changed: [192.168.0.1] => (item={'NAME': 'httpd', 'REPO': 'appstream'}) changed: [192.168.0.1] => (item={'NAME': 'httpd-devel', 'REPO': 'appstream'}) changed: [192.168.0.1] => (item={'NAME': 'httpd-tools', 'REPO': 'appstream'}) changed: [192.168.0.1] => (item={'NAME': 'httpd-manual', 'REPO': 'appstream'}) ... 2-2-2. コヌドの修正 以䞋ansible公匏 ansible.builtin.yum module – Manages packages with the yum package manager — Ansible Documentation の yum moduleのサンプルコヌドにもあるようにパッケヌゞ名は配列にお枡すこずができたす。 - name: Install a list of packages with a list variable yum: name: "{{ packages }}" vars: packages: - httpd - httpd-tools 以䞋様に曞き換えを行う 「パッケヌゞ名をリスト圢匏に倉曎する」 こずで、 yum モゞュヌルの実行回数を倧幅に削枛するこずができたす。 実際にこのサンプルコヌドでも実行時間を玄半分にするこずができたした。 - set_fact: INSTALL_PACKAGES: - NAME: - 'httpd' - 'httpd-devel' - 'httpd-tools' - 'httpd-manual' REPO: 'appstream' --- 実行ログ TASK [test : Install Packages] ************************************************ Friday 06 May 2022 01:36:19 -0400 (0:00:00.023) 0:00:03.246 ************ changed: [192.168.0.1] => (item={'NAME': ['httpd', 'httpd-devel', 'httpd-tools', 'httpd-manual'], 'REPO': 'appstream'}) 2-3. 動的曞き換えの芋盎し ラク スで䜿っおいるansibleコヌドテンプレヌトでは、汎甚的な凊理を別のタスクファむルにしお、 「include_role」や「include_tasks」で動的に読み蟌み曞き換えるこずで、コヌドの再利甚性を高める取り組みを行っおおりたす。 その為、繰り返し凊理を行うず毎回コヌドの動的曞き換えず実行が行われる為、凊理時間が䌞びおいきたす。 2-3-1. コヌドの確認 以䞋のように汎甚的な凊理を別のロヌルに集めおおり $ roles/libraries/tasks/copy.yml --- - name: FILE COPY copy: src: "{{ item.SRC }}" dest: "{{ item.DEST }}" owner: "{{ item.OWNER }}" group: "{{ item.GROUP }}" mode: "{{ item.MODE }}" 呌び出し元からinclude_role等で呌び出しお利甚しおいたす。 $ roles/test/tasks/main.yml --- - name: Copy files include_role: name: libraries tasks_from: copy.yml with_items: - { SRC: 'test1', DEST: '/tmp/test1', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test2', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test3', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test4', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test5', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test6', OWNER: 'root', GROUP: 'root', MODE: '0644' } 実行するず、毎回copy.ymlが呌ばれる毎に凊理が行われる為、毎回TASKが呌ばれたす。 TASK [Copy files] ******************** Monday 06 June 2022 02:00:31 -0400 (0:00:01.356) 0:00:01.386 TASK [libraries : FILE COPY] ********* Monday 06 June 2022 02:00:31 -0400 (0:00:00.087) 0:00:01.474 changed: [192.168.0.1] TASK [libraries : FILE COPY] ********** Monday 06 June 2022 02:00:33 -0400 (0:00:01.099) 0:00:02.573 changed: [192.168.0.1] TASK [libraries : FILE COPY] ********** Monday 06 June 2022 02:00:33 -0400 (0:00:00.910) 0:00:03.484 changed: [192.168.0.1] TASK [libraries : FILE COPY] ********** Monday 06 June 2022 02:00:34 -0400 (0:00:00.869) 0:00:04.354 changed: [192.168.0.1] TASK [libraries : FILE COPY] *********** Monday 06 June 2022 02:00:35 -0400 (0:00:00.889) 0:00:05.243 changed: [192.168.0.1] TASK [libraries : FILE COPY] ********* Monday 06 June 2022 02:00:36 -0400 (0:00:00.854) 0:00:06.098 changed: [192.168.0.1] PLAY RECAP ********************************************* 192.168.0.1 : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Monday 06 June 2022 02:00:37 -0400 (0:00:00.830) 0:00:06.928 *********** =================================================== Gathering Facts --------------- 1.36s libraries : FILE COPY ---------- 1.10s libraries : FILE COPY ---------- 0.91s libraries : FILE COPY ---------- 0.89s libraries : FILE COPY ---------- 0.87s libraries : FILE COPY ---------- 0.85s libraries : FILE COPY ---------- 0.83s Copy files --------------------- 0.09s 2-3-2. コヌドの修正 動的曞き換え(include_*)を䜿わずに静的凊理に倉曎したす。 $ roles/test/tasks/main.yml --- - name: Copy files copy: src: "{{ item.SRC }}" dest: "{{ item.DEST }}" owner: "{{ item.OWNER }}" group: "{{ item.GROUP }}" mode: "{{ item.MODE }}" with_items: - { SRC: 'test1', DEST: '/tmp/test1', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test2', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test3', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test4', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test5', OWNER: 'root', GROUP: 'root', MODE: '0644' } - { SRC: 'test1', DEST: '/tmp/test6', OWNER: 'root', GROUP: 'root', MODE: '0644' } Ansibleを実行するずわずかですが、実行時間が短くなりたした。 曞き換えを行う回数が増えるほど効果は高くなりたすが、倉曎による効果はそれほど高くない為、「コヌドの再利甚性」ずどちらがよいかはで䜿い分ける必芁がありそうです。 TASK [test : Copy files] *********************************** Monday 06 June 2022 02:01:26 -0400 (0:00:01.413) 0:00:01.437 *********** changed: [192.168.0.1] => (item={'SRC': 'test1', 'DEST': '/tmp/test1', 'OWNER': 'root', 'GROUP': 'root', 'MODE': '0644'}) changed: [192.168.0.1] => (item={'SRC': 'test1', 'DEST': '/tmp/test2', 'OWNER': 'root', 'GROUP': 'root', 'MODE': '0644'}) changed: [192.168.0.1] => (item={'SRC': 'test1', 'DEST': '/tmp/test3', 'OWNER': 'root', 'GROUP': 'root', 'MODE': '0644'}) changed: [192.168.0.1] => (item={'SRC': 'test1', 'DEST': '/tmp/test4', 'OWNER': 'root', 'GROUP': 'root', 'MODE': '0644'}) changed: [192.168.0.1] => (item={'SRC': 'test1', 'DEST': '/tmp/test5', 'OWNER': 'root', 'GROUP': 'root', 'MODE': '0644'}) changed: [192.168.0.1] => (item={'SRC': 'test1', 'DEST': '/tmp/test6', 'OWNER': 'root', 'GROUP': 'root', 'MODE': '0644'}) PLAY RECAP ********************************************************************* 192.168.0.1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Monday 06 June 2022 02:01:31 -0400 (0:00:05.252) 0:00:06.689 *********** =================================================== test : Copy files --------------------5.25s Gathering Facts -------------------1.41s 3. Ansible実行環境チュヌニング 3-1. 䞊列実行数の倉曎 Ansibleの暙準蚭定では䞊列で実行するタヌゲット数が"5"ず蚭定されおいる為、倚くのタヌゲットに察しお実行する堎合に時間がかかりたす。 その為、䞊列実行数の倉曎を行いたす。 FORKS蚭定はAnsibleの子プロセスを増やす蚭定の為、増やせば増やすほどCPUぞの負荷がかかりたす。 各CPUの䜿甚率を確認し、䞍足しおいるようであればCPU数を増やすこずを怜蚎しおください。 $ /etc/ansible/ansible.cfg --- [defaults] forks = 5 もしくは 実行時にANSIBLE_FORKS=NUMを蚭定 ANSIBLE_FORKS=20 ansible-playbook ... 3-2. Pipelining ansibleのデフォルト蚭定の堎合、各タスクを実行する床に以䞋の䟋の様にタヌゲット偎の"~{ansible実行ナヌザのホヌム ディレクト リ}/.ansible/"に python プログラムの展開を行いAnsibleを実行しおいたす。 その為、タヌゲットぞのデヌタ転送時間ずこれらのファむルの曞き蟌み等により、各タスクの実行に時間がかかりたす。 /home/ansible_user/.ansible/ansible-tmp-1651804170.1883245-2652826-75480101479031/ 合蚈 120 drwx------. 2 root root 31 5月 5 22:28 . drwx------. 3 root root 68 5月 5 22:28 .. -rw-------. 1 root root 119155 5月 5 22:28 AnsiballZ_stat.py Pipeliningの有効化 Pipeliningを有効化するこずで、 ssh のpipeを経由しおansibleを実行するこずで高速化を行うこずができたす。 $ /etc/ansible/ansible.cfg --- [ssh_connection] pipelining = True ※蚭定を蚘茉するセクションは[defaults]ではなく[ ssh _connection]であるこずに泚意しおください もしくは 実行時にANSIBLE_PIPELINING=True か ANSIBLE_PIPELINING=1を蚭定 ANSIBLE_PIPELINING=1 ansible-playbook ... 公匏ドキュメント Ansible Configuration Settings — Ansible Documentation にもある通り、 requrettyが蚭定されおいるナヌザでansibleを実行する堎合は、sudo蚭定にお無効にする必芁がある為泚意が必芁です。 Pipelining有効化の確認 Ansible実行時にPipeliningが有効になっおいるかは、-vvvオプションを付けるこずで確認するこずができたす。 以䞋の䟋の様に "Pipelining is enabled" ず出力されおいるこずを確認しおください。 ... Pipelining is enabled. <192.168.0.1> ESTABLISH SSH CONNECTION FOR USER: ansible_user ... 3-3. サヌドパヌティ 補 Strategy Plugin (Mitogen for Ansible) Mitogen — Mitogen Documentation Other Toolsずしお公匏で玹介されおいるMitogen for Ansibleを䜿うこずで、䞊蚘Pipeliningよりも実行速床の高速化を行うこずができたす。 Mitogenは 実行コヌドのRAMぞのキャッシュ pipelineず同様タヌゲットぞの曞き蟌み削枛 埓来のPreforkモデルに加えお、Thread化によるさらなる䞊列化・高速化 ネットワヌクコネクションの再利甚等 によりAnsibleの実行を高速化するこずができたす。 Mitogen利甚時に気付いた点 Mitogen利甚時に以䞋の事象が確認できたしたので、利甚するには事前に怜蚌が必芁です。 珟行v0.2.9ではタヌゲットサヌバ偎に"/usr/bin/ python "が必芁(/usr/bin/python3ではダメ) ansible 2.10以降には未察応 (2022/06/13時点でAnsible v2.10以䞊に察応するv0.3.xは未リリヌス 2022/06/13远蚘) タヌゲットの python 環境によっおは動かないコヌドがある include_roleは未察応 CPU䜿甚率がPipeliningよりかなり高い メモリの䜿甚率が高い Pipeliningずの䜵甚はできない どなたかv2.10以降でmitogen for Ansibleが動くよずいうコメントをいただきたしたが、公匏ニュヌスに蚘茉されおいるように v0.2.xは2.10未満 v0.3.x系は2.10以䞊 をサポヌトずいう颚にバヌゞョンが分かれるようです(2022/06/13远蚘) Release Notes — Mitogen Documentation Mitogenの利甚方法 ■Ansible実行環境にMitogenを蚭眮 $ curl -kL -o https://networkgenomics.com/try/mitogen-0.2.9.tar.gz $ tar zxvf mitogen-0.2.9.tar.gz -C /opt/ ■Strategy プラグむン ずしおmitogenを蚭定 $ ansible.cfg --- [defaults] strategy_plugins = /opt/mitogen-0.2.9/ansible_mitogen/plugins/strategy ■各playbook毎にstrategyを蚭定しおmitogenを有効化したす。(ansible.cfgで党䜓に適甚しおもよい) $ playbook.yml --- - name: Test Playbook strategy: mitogen_linear hosts: test-servers ... あるPlaybookの実行時間の差を確認したずころ、以䞋様にかなりの差がありたした。 Default状態 ... 0:00:22.399 Pipelining ... 0:00:17.744 Mitogen for Ansible ... 0:00:09.333 3-4. 䞊蚘実行環境毎の実行速床の蚈枬比范結果 怜蚌ずしおタヌゲットサヌバ20台に察し、 ディレクト リ10個䜜成する凊理を行いたした。 それぞれの環境毎に5回実行し、䞀番早い時間ず䞀番遅い時間を陀く3回の平均時間を蚘しおいたす。 [怜蚌結果] AnsibleサヌバCPU数 FORK数 CPU䜿甚率 平均実行時間 コメント [Default] 1 5 20 - 40% 01:39 1 10 20 - 70% 01:05 1 20 30 - 100% 00:42 CPUが100%ずなる堎合があり凊理埅ちが発生 2 5 10 - 20% 01:36 1 vCPUでもCPUに䜙裕があった為、CPU远加効果なし 2 10 20 - 40% 01:01 1 vCPUでもCPUに䜙裕があった為、CPU远加効果なし 2 20 15 - 80% 00:36 CPU 100%が解消され凊理時間が短瞮 [Pipelining] 1 5 30 - 40% 00:40 Pipeliningの効果が高いが若干CPU䜿甚率が䞊昇 1 10 30 - 70% 00:28 Pipeliningの効果が高いが若干CPU䜿甚率が䞊昇 1 20 30 - 100% 00:21 Pipeliningの効果が高いが若干CPU䜿甚率が䞊昇 2 5 15 - 30% 00:38 1 vCPUでもCPUに䜙裕があった為、CPU远加効果なし 2 10 20 - 40% 00:26 1 vCPUでもCPUに䜙裕があった為、CPU远加効果なし 2 20 30 - 50% 00:17 CPU 100%が解消され凊理時間が短瞮 [Mitoge] 1 5 100% 00:18 Pipeliningよりさらに効果が高いがCPU䜿甚率がかなり䞊昇 1 10 100% 00:16 Pipeliningよりさらに効果が高いがCPU䜿甚率がかなり䞊昇 1 20 100% 00:16 Pipeliningよりさらに効果が高いがCPU䜿甚率がかなり䞊昇 2 5 25 - 50% 00:19 CPUに䜙裕がでたが、CPU远加効果なし 2 10 40 - 60% 00:16 CPUに䜙裕がでたが、CPU远加効果なし 2 20 30 - 70% 00:14 SWAPが発生 2+2GBメモリ 20 50% 00:14 メモリを远加するこずでSWAPが解消 実行速床怜蚌総括 Pipelining Ansible暙準機胜ずしお実装されおいる為、手軜に利甚が可胜で効果が高い為、暙準で利甚できるようにしおおくずよい。 Ansible実行偎のCPU䜿甚率の䞊昇が若干芋られるが、実行環境の倧幅な芋盎しは必芁ない。 䞊列実行数(ANSIBL_FORKS) 䞊列実行数を䞊げお実行する堎合はAnsible実行偎のCPU䜿甚率を確認しお匕き䞊げる必芁がある。 Mitogen for Ansible CPUの䜿甚率が高い為、CPUの割り圓お数に泚意が必芁。 䞊列実行数を増やすAnsible実行サヌバのメモリ䜿甚量が䞊がる為、メモリの割り圓おに泚意が必芁。 初期導入䜜業が必芁だが、Pipelineよりも効果が高い。 4. 高速化の結果 最終的に Mitogen Plugin及び䞊蚘コヌドの改修等を進め 以䞋の様に 1/3に高速化するこずができたした ■改修前 Tuesday 07 June 2022 01:14:14 -0400 (0:00:03.472) 0:05:20.110 ********** ■改修埌 Tuesday 07 June 2022 01:04:01 -0400 (0:00:02.327) 0:01:34.366 ********** 終わり ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに はじめたしお。knng1です。 本蚘事では、AnsibleのRoleの䜿甚方法に぀いおたずめおいきたいず思いたす。 Ansibleを実務で䜿甚する堎合、基本的にはRole化されおいるずころが倚いず思いたすので、 これからAnsibleã‚’è§Šã‚‹æ–¹ 最近Ansibleの勉匷を始めた方 の参考になれば幞いです。 はじめに Ansible ずは Ansible 䜿甚䟋 ディレクトリ sample.yml 実行ログ Roleに぀いお ディレクトリ sample-role.yml roles/yum/tasks/main.yml roles/template/tasks/main.yml roles/template/handlers/main.yml 実行ログ その他の機胜に぀いお defaults roles/<Role名>/defaults/main.yml サンプル vars roles/<Role名>/vars/main.yml files roles/<Role名>/files/main.yml meta roles/<Role名>/meta/main.yml Ansible Role おたけ ansible-galaxy init Ansible ずは Ansibleは RedHat 瀟が開発する OSS の構成管理ツヌルです。 あらかじめ蚘述したPlaybookファむル通りに゜フトりェアのむンストヌルや蚭定を自動で行うこずができたす。 管理察象機噚には SSH プロトコル を䜿甚するため、゚ヌゞェントレスでの導入が可胜です。 新芏に構築するシステムはもちろん、すでに数十台、数癟台を管理しおいるようなシステムでも容易に導入ができたす。 詳现はAnsibleを説明しおいる 公匏ドキュメント をご参照ください。 Ansible 䜿甚䟋 今回は apache のむンストヌル、confファむルの配垃、サヌビスの再起動を行う簡単なPlaybookを䜜成したした。 ※Playbookの詳现に぀いおは こちら ディレクト リ ├── ansible.cfg ├── sample.yml ├── templates │ └── httpd.conf.j2 └── test-hosts sample.yml [root@AnsibleServer ansible]# cat sample.yml --- - hosts: test-server gather_facts: false tasks: - name: install apache yum: name: httpd state: installed - name: setup apache template: src: httpd.conf.j2 dest: /etc/httpd/conf/httpd.conf - name: restart apache service: name: httpd state: restarted enabled: yes 実行ログ Playbookを実行するず䞋蚘のようなログが出力されたす。 changedが衚瀺されおいれば、taskの実行によっおタヌゲットのサヌバに倉曎が加えられたこずを瀺しおいたす。 [root@AnsibleServer ansible]# ansible-playbook -i test-hosts sample.yml PLAY [test-server] ************************************************************************************************************************************************************************************************** TASK [install apache] *********************************************************************************************************************************************************************************************** changed: [test-server] TASK [setup apache] ************************************************************************************************************************************************************************************************* changed: [test-server] TASK [restart apache] *********************************************************************************************************************************************************************************************** changed: [test-server] PLAY RECAP ********************************************************************************************************************************************************************************************************** test-server : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Roleに぀いお AnsibleのRoleは凊理毎にグルヌプ化しお分割する機胜です。 roles アトリビュヌト で察象のグルヌプ(Role)を呌び出すず「roles/<Role名>/tasks/main.yml」が読み蟌たれたす。 ※「main.yml」以倖の名前ではincludeやimportをしないず読み蟌んでもらえないのでご泚意ください。 たた、rolesを䜿甚しおいる堎合、handlersを䜿甚するこずができたす。 handlersは「roles/<role名>/tasks/main.yml」内の察象のタスクがchangedステヌタスで終了した堎合に実行される凊理です。 ここで実行したい凊理は「roles/<role名>/handlers/main.yml」に蚘述し、tasks配䞋のmain.ymlで「notify: <タスク名>」を蚘述しお呌び出したす。 コンフィグファむルの配垃等、サヌバに倉曎が加わった堎合のみサヌビスを再起動したい堎合にずおも有甚な機胜です。 サンプルPlaybookをrole化しお分割するず、以䞋のような感じになりたす。 ディレクト リ ├── roles │ ├── template │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ └── httpd.conf.j2 │ └── yum │ └── tasks │ └── main.yml ├── sample-role.yml └── test-hosts sample-role.yml - hosts: test-server gather_facts: false roles: - yum - template roles/ yum /tasks/main.yml --- - name: install apache yum: name: httpd state: installed roles/template/tasks/main.yml --- - name: setup apache template: src: httpd.conf.j2 dest: /etc/httpd/conf/httpd.conf notify: restart apache roles/template/handlers/main.yml --- - name: restart apache service: name: httpd state: restarted enabled: yes 実行ログ [root@AnsibleServer ansible]# ansible-playbook -i test-hosts sample-role.yml PLAY [test-server] ************************************************************************************************************************************************************************************************** TASK [yum : install apache] ***************************************************************************************************************************************************************************************** changed: [test-server] TASK [template : setup apache] ************************************************************************************************************************************************************************************** changed: [test-server] RUNNING HANDLER [template : restart apache] ************************************************************************************************************************************************************************* changed: [test-server] PLAY RECAP ********************************************************************************************************************************************************************************************************** test-server : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 その他の機胜に぀いお AnsibleのRoleには前述した「tasks」、「handlers」、「templates」以倖にもいろいろな機胜がありたす。 䟿利に䜿甚できるものが倚いので、簡単に説明させおいただきたす。 defaults roles/<Role名>/defaults/main.yml 察象のAnsibleのRoleは、デフォルト倉数を定矩する機胜です。 その他の倉数ファむルで定矩された堎合、ここで定矩された倉数は䞊曞きされたす。 蚘述方法はその他倉数ファむルず同様です。 サンプル --- ansible_user: root package: - { state: installed , name: httpd } - { state: installed , name: tomcat } vars roles/<Role名>/vars/main.yml その名の通り、倉数を定矩する機胜です。 ここで定矩する倉数は最埌に読み蟌たれるため、「defaults」はもちろん「group_vars」や「host_vars」の倉数も䞊曞きたす。 デフォルト倉数はずもかく、倉数ファむルが耇数個所にたたがっお配眮されるず管理が煩雑になるため、 個人的には特別な理由がない限りは「group_vars」や「host_vars」を䜿甚した方が管理しやすいず思いたす。 files roles/<Role名>/files/main.yml Copyモゞュヌルを䜿甚する際にファむルを栌玍する ディレクト リです。 ここに栌玍されたファむルはファむル名のみで呌び出し可胜です。 meta roles/<Role名>/meta/main.yml Ansibleの各Roleの䟝存関係を定矩するファむルです。 「 yum 」のmeta/main.ymlで「template」を指定した堎合、䞋蚘のように「template」⇒「 yum 」の順に実行されおしたいたすので泚意が必芁です。 [root@AnsibleServer ansible]# ansible-playbook -i test-hosts sample-role.yml PLAY [test-server] ************************************************************************************************************************************************************************************************** TASK [template : setup apache] ************************************************************************************************************************************************************************************** changed: [test-server] TASK [yum : install apache] ***************************************************************************************************************************************************************************************** changed: [test-server] RUNNING HANDLER [template : restart apache] ************************************************************************************************************************************************************************* changed: [test-server] PLAY RECAP ********************************************************************************************************************************************************************************************************** test-server : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 Ansible Role おたけ ansible-galaxy init AnsibleのRoleの各 ディレクト リは「ansible-galaxy init <Role名>」で簡単に生成できたす。 新芏でAnsibleのRoleを䜜成する際に利甚しおみおください。 [root@AnsibleServer ansible]# ansible-galaxy init roles/test - Role roles/test was created successfully [root@AnsibleServer ansible]# [root@AnsibleServer ansible]# ll roles/test total 4 drwxr-xr-x 1 root root 512 May 29 11:42 defaults drwxr-xr-x 1 root root 512 May 29 11:42 files drwxr-xr-x 1 root root 512 May 29 11:42 handlers drwxr-xr-x 1 root root 512 May 29 11:42 meta -rw-r--r-- 1 root root 1328 May 29 11:42 README.md drwxr-xr-x 1 root root 512 May 29 11:42 tasks drwxr-xr-x 1 root root 512 May 29 11:42 templates drwxr-xr-x 1 root root 512 May 29 11:42 tests drwxr-xr-x 1 root root 512 May 29 11:42 vars ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに JUnitずSpockに぀いお ラむフサむクルの定矩 テストクラス デヌタドリブンテスト たずめ はじめに こんにちは、ryrkssです。 今回は、今のプロゞェクトのテスト フレヌムワヌク に JUnit ず Spock が䜿われおいるので、 簡単なテストコヌドでどう曞き方が違うのか比范しおみようず思いたす。 たた、それぞれ各テストで出おくる アノテヌション や怜蚌メ゜ッドに぀いおの説明は割愛したす。 本蚘事で䜿う JUnit は JUnit5 です。 以埌 JUnit が倚発したすが党お JUnit5 ずしお捉えおいただければ幞いです。 JUnit ずSpockに぀いお みなさんご存知の方は倚いず思いたすが「知らないよ」ずいう方に向けおちょっずだけたずめたす。 JUnit Java のテスト フレヌムワヌク ずいえば真っ先に思い浮かぶ有名なテスト フレヌムワヌク です。 Java ゚ンゞニアであれば党おの人が通る道ではないでしょうか。 Spock Groovy で動䜜する Java のテスト フレヌムワヌク です。 Java ずは違う蚀語で曞くので「違う蚀語芚えないずいけないのか」ず思う人もいるかもしれたせんが、 Java ずほが同じ感芚でコヌディングできたす。 䜕よりデヌタドリブンテストが JUnit ず比べお非垞に曞きやすく可読性も高いです。 あずは、MockAPIが暙準で入っおいるこずも嬉しい人には嬉しいず思いたす。 ※私は䜿い慣れおいる Mokito を䜿っちゃっおたすが。 JUnit ず Spock は共存できるので、是非どちらも詊しおみおください。 それでは、 JUnit ず Spock のテストコヌドの曞き方を比べおみたす。 ラむフサむクルの定矩 良く䜿いたすが JUnit は アノテヌション 、 Spock はメ゜ッド名で定矩したす。 JUnit アノテヌション で実行タむミングを衚珟したす。 // 各テストメ゜ッドが実行される前に郜床実行 @BeforeEach void init() {} // 各テストメ゜ッドが実行された埌に郜床実行 @AfterEach void cleanup() {} // テストクラスが実行される前に1床だけ実行 @BeforeAll static void initAll() {} // テストクラスが実行された埌に1床だけ実行 @AfterAll static void cleanupAll() {} Spock メ゜ッド名で実行タむミングを衚珟したす。 // 各テストメ゜ッドが実行される前に郜床実行 def setup() {} // 各テストメ゜ッドが実行された埌に郜床実行 def cleanup() {} // テストクラスが実行される前に1床だけ実行 def setupSpec() {} // テストクラスが実行された埌に1床だけ実行 def cleanupSpec() {} Spock のメ゜ッド名だけで刀別しおくれるのは、コヌドがスッキリしお良いですよね。 JUnit はお銎染みの アノテヌション 定矩です。 芋慣れすぎお䜕も思わないです。 テストクラス JUnit @Test @DisplayName( "文字列結合" ) void combineStringsTest() { var expected = "テスト" ; var actual = sut.combineStrings( "テ" , "ス" , "ト" ); assertEquals(expected, actual); } Spock def "文字列結合" () { setup : def expected = "テスト" when : def actual = sut.combineStrings( "テ" , "ス" , "ト" ) then : actual == expected } 単玔なテストを曞きたしたが、結構違いたすね。 JUnit ず Spock で目に付く違いは、ブロックの定矩です。 JUnit はコヌドを蚘述しおいるだけですが、 Spock には setup: や when: など 蚘茉しおいるもの以倖にもそれぞれのフェヌズに応じたブロックがありたす。 単なる分かりやすくするためだけのものではないので、ちゃんず状況に応じた䜿い分けをしたしょう。 たた、こう芋るず JUnit は アノテヌション @Test を毎回぀けなければならないのが冗長に感じたす。 怜蚌メ゜ッドに぀いおも JUnit はメ゜ッドを䜿甚する必芁がありたすが、 Spock は等䟡 挔算子 を䜿うだけで事足りたす。 こちらは比范的䞇胜で配列やリスト、数倀なども等䟡 挔算子 で怜蚌できたす。 デヌタドリブンテスト こちらもよく䜿いたす。 同じようなテストを1぀1぀メ゜ッドで分けるのは、テストケヌスが芋えにくく可読性が萜ちおしたいたすよね。 JUnit は ParameterizedTest で怜玢するず出おくるず思いたすが、 枡しおいる倀ず想定結果の関係性が分かりにくく、同時に曞きにくいず感じおしたいたした。 その反面 Spock は非垞に曞きやすく、芋やすいので実装しおいる時にパタヌンを掗い出しやすいです。 たたレビュヌ時もテストケヌスを考えずずも頭に入っおくる感芚で個人的には䞭毒になるレベルです。 癟聞は䞀芋に劂かずずいうこずで、早速比范しおみたいず思いたす。 JUnit 䟋ずしお、3皮類の曞き方を蚘茉したす。 ただパラメヌタが少ない䞔぀、型を同䞀にしおいるので幟分芋え方がたしですが、 ②、③に぀いおはパラメヌタ数が倚くなる、色々な型が混じるずなるず 本圓に䜕のテストをしおいるのか分からなくなっおきたすね 。 /* ① 単䞀パラメヌタのみを定矩する曞き方 匕数で定矩した型に暗黙的に倉換される(サポヌトされおいる型は芁確認) */ @ParameterizedTest @ValueSource(strings = { " テスト " , " テスト" , "テスト " }) void trimTest1(String target) { var expected = "テスト" ; var actual = sut.trim(target); assertEquals(expected, actual); } /* ② csv圢匏でパラメヌタを定矩できる曞き方 デリミタを倉曎したり倖郚ファむルを指定するこずもできる 䟋は文字列だけだが他の型も定矩できお、匕数で定矩したそれぞれの型に暗黙的に倉換される */ @ParameterizedTest @CsvSource ({ " テスト , テスト" , " テスト, テスト" , "テスト , テスト" , }) void trimTest2(String target, String expected) { var actual = sut.trim(target); assertEquals(expected, actual); } /* ③ 別メ゜ッドにパラメヌタを定矩できる曞き方 メ゜ッドで匕数を定矩するので独自の型をパラメヌタで䞎えるこずができたり、 ただのメ゜ッドなので最終的に返り倀の圢にしおあげれば䜕でもできるむメヌゞ */ @ParameterizedTest @MethodSource( "trimArguments" ) void trimTest3(String target, String expected) { var actual = sut.trim(target); assertEquals(expected, actual); } static Stream<Arguments> trimArguments() { return Stream.of( Arguments.of( " テスト " , "テスト" ), Arguments.of( " テスト" , "テスト" ), Arguments.of( "テスト " , "テスト" ), Arguments.of( null , "" ) ) } Spock 䟋ずしお2皮類ありたすが、どちらもメ゜ッドに @Unroll を぀けお、 where: にパラメヌタを定矩しおいくだけずなりたす。 たた、文字列だけを扱うテストになっおたすが、勿論他の型が混じっおも問題ありたせん。 簡単なものしか蚘茉しおいたせんが、 where は色々な䜿い方ができるようなので興味のある方は調べおみおください。 /* ①デヌタテヌブルを䜿甚した曞き方 1行目がテスト内の倉数にマッピングされ、2行目以降がその倉数に入れるデヌタパタヌン || を぀けるこずで怜蚌甚のデヌタず想定結果を芖芚的に分かりやすくできる */ @Unroll( "文字列前埌空癜陀去 #title" ) def "trimTest1" () { when : def actual = sut.trim(target) then : actual == expected where : title | target || expected "前埌空癜" | " テスト " || "テスト" "前空癜" | " テスト" || "テスト" "埌空癜" | "テスト " || "テスト" "null" | null || "" } /* ②デヌタパむプを䜿甚した曞き方 巊シフト挔算子で倉数ずデヌタ郚を接続 */ @Unroll( "文字列前埌空癜陀去 #title" ) def "trimTest2" () { when : def actual = sut.trim(target) then : actual == expected where : [title, target, expected] << [ [ "前埌空癜" , " テスト " , "テスト" ], [ "前空癜" , " テスト" , "テスト" ], [ "埌空癜" , "テスト " , "テスト" ], [ "null" , null , "" ] ] } たずめ いかがでしたでしょうか 簡単な䟋しか出せおおらずむメヌゞが぀きにくいかもしれたせんが、 テストの可読性・曞きやすさだけでいうず JUnit よりも Spock の方が印象ずしお良いのかなず私は感じたした。 珟圚のチヌムでも新しく䜜るテストクラスは倧䜓 Spock で䜜っおたりしおたす。 ただし、 JUnit にしかできないこずもありたす。 䟋えば、 JUnit のネスト( @Nested )を䜿っおテストをたずめるこずが Spock ではできたせん。 テストも色々な曞き方があっお奥が深いですね〜 テストの実装はベストプ ラク ティスをあたり深く考えおこなかったのですが、 しっかりず可読性や䜕が最良なコヌディングかを考えおいかなくおはいけないな、ず感じおおりたす。 党䜓を通しおかなり Spock よりの蚘事になっおしたいたしたが、 結論 JUnit も Spock もどちらも䜿いやすいです。 最埌に...冒頭でも曞かせおいただきたしたが JUnit ず Spock は共存できるので 是非実際にそれぞれでテストを曞いおみおください ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに Gather.Townずは 導入しようず思ったきっかけ オフィスの䜜り方 どう䜿ったか たずめ・感想 はじめに こんにちは。新卒3幎目hy094です。 最近はスパむのアニメにハマっおいたす。ファミリヌのや぀です。 今回は Gather.Town を導入したらリモヌトワヌク䞭の開発速床が向䞊した話をしたいず思いたす。 Zoomが2人の通話でも制限時間が40分になっおしたい、代替ツヌルを探しおいる方もいるかず思いたすので、少しでも刀断材料になれば嬉しいです。 Gather.Townずは 䞀蚀で蚀うず "Pokemon x Zoom thing" ( Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. ) です。 ポケモン ずZoomを掛け合わせたかのようなツヌルで、ゲヌム奜きの人には芪しみやすくか぀Zoomに近い䜿い心地で利甚できたす。(䜿い方によっおはZoomを䞊回る利䟿性すら秘めおいるず思いたす。 衚題では「リモヌトオフィス」ず衚珟したしたが、これは私たちの䜿い方がリモヌトオフィスに近かったためです。Gather.Townはオフィスに限らず様々な甚途に掻甚できたす。 䞀䟋ずしお、瀟内サヌクルでの掻甚事䟋です。 Gather.Townで瀟内サヌクル掻動の䞀郚をオンラむン化したした - Qiita 導入しようず思ったきっかけ 匊瀟は基本オフィスワヌクで、緊急事態宣蚀やたんえん防止等重点措眮などが発什されおいる堎合のみ完党リモヌトワヌクになる運甚でした。 ここしばらくは萜ち着いおおり出瀟しおいたすが、珟圚もおそらく同様です 皆さんもご存知の通り、発什したり解陀したりが繰り返されおいたため、私たちも出瀟ずリモヌトを繰り返しおいたした。 そこで出瀟した際にリモヌトの仕事がどうだったか新卒入瀟の埌茩に聞いたずころ、 「気軜に盞談しにくい」 ずいった声がありたした。 出瀟時は隣にちょっず声をかけるだけのずころを、チャットで連絡→返信埅぀→ZoomURLを共有→入宀埅぀→盞談ずいった流れで、実装で少し詰たったずころを聞くだけで15分〜30分かかるずいった状態です。 そこで䞁床䞊蚘の瀟内サヌクルでの導入事䟋を芋お、同じ空間にいれば声をかけやすいのではず導入しおみるこずにしおみたのです。 オフィスの䜜り方 導入方法に぀いおは再掲になりたすが、匊瀟の昚幎の アドベントカレンダヌ に蚘茉があるのでそちらを参照しおください。 Gather.Townで瀟内サヌクル掻動の䞀郚をオンラむン化したした - Qiita ここでは、オフィスの䜜成方法だけお䌝えしたす。 基本は䞊蚘の蚘事の通りで倧䞈倫なんですが、「Explore social experiences」でそのたたテンプレヌトが遞べなくなっおいたので、テンプレヌトたでの道のりも瀺しおおきたす。 䞀番巊の「Set up an office or team social」を遞択 巊の「Remote Office」を遞択 オフィスを改造したり増築する予定がない方はこのたた「Confirm Selection」を抌しおください。 ※「Confirm Selection」で䜜成されるspaceに床や壁を远加しようずするず、デフォルトで぀いおいる背景など党お消え去っおしたうためです。䞀床space䜜り盎したした ※ただ壁ず床の远加はベヌタ版のようなので、いずれ線集できるようになるかもしれたせん 壁や床を線集しようずするず以䞋のような譊告が出お・・・ Yesを抌すず真っ癜になっおしたいたす 「Confirm Selection」がある画面の巊䞋に「See other space」ずいうボタンがあるので、それを遞択するずテンプレヌト遞択画面に飛べたす。 あずは先皋の蚘事の通り䜜成しおいただければ問題なく郚屋の改築が可胜です。 どう䜿ったか オフィスずしおGather.Townの特性を最倧限掻かすための䜿い方はズバリ 「垞時ログむンし座っおおくこず」 です。 他の䜜業をやっおいる時も裏で起動しおおき、キャ ラク タヌを机の前(怅子の䞊)に眮いおおきたす。 芋た目で「出瀟しおる感」があるのはもちろん、通知機胜(ログむン䞭でGather.Townが非アクティブな人に通知を送るこずができる)などを䜿うこずで、オフィスでは普通にやっおいる「すみたせん、今お時間いいですか」をリモヌトで実珟するこずができたした。 実際の䜜業䞭の颚景↓ ちなみに、埌ろ向いおたすが青いのが僕です。 ポケモン のアクア団をむメヌゞしたした。 たた、逆にチャットで悩んでる雰囲気の人を芋぀け、教える偎の人が突撃するこずも容易になりたした。 盞談がしやすくなったこずで䞀人で悩む時間が栌段に枛り、結果的に開発がスムヌズに進むようになりたした。 ただ、䞀぀倧きな問題があり・・・ Gather.Townはそこそこ重く、それを垞時起動ずするずそれなりにメモリを喰っおしたうこずです。 導入の際はマシンスペックやコミュニケヌションぞの課題感ず盞談しおいただければず思いたす。 たずめ・感想 たず、導入しお本圓によかったです。 オフィスワヌクず遜色ないレベルでコミュニケヌションが取りやすくなり、開発もスムヌズに進むので導入前に比べお楜しく開発できたした。 たた、Gather.Townの導入は圓時2幎目の私が提案し、導入に至っおいたす。 若手も色々ず提案でき、それをやっおみるこずができる環境は個人的にはずおも嬉しいです。 Gather.Townには他にもたくさんメリットデメリットがありたしたが、そちらは別途「 ラクス フロント゚ンドチヌムnote 」の方にたずめたした 是非ご確認ください。 note.com ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、技術広報の yayawowo です。 システム開発 で重芁な『開発ずテスト』に぀いお、 ゚ンゞニアの䜓隓談やTipsを芗いおみたせんか 延べ450名以䞊の参加申蟌をいただいた、 『開発×テスト LT䌚』党2開催分の資料をたずめお玹介したす むベント詳现はこちらをご確認ください ・ 開発×テスト LT䌚 ・ 開発×テスト LT䌚 - vol.2 開発×テスト Tips 11遞 絶察にテストコヌドを曞かないチヌムのテストルヌル 意倖ずカンタン!?テストコヌドの改善から始めるシステム開発の効率化 テスト嫌いなプログラマがテストを語る ISTQB/JSTQBシラバスから孊ぶAgileTesting 単䜓テストれロからテスト文化を醞成させた話 少しず぀手厚くしお䞍具合や仕様挏れを防ぐために CircleCIお゙timing dataに基぀゙いたテスト分割をDartお゙利甚お゙きるようにした話 ゜フトりェア゚ンゞニアが品質保蚌を孊んでわかったこず 個人開発でテストを曞いおみお良かったこず䌞びしろ UTアンチパタヌン むンシデントゼロを支える技術 最埌に 開発×テスト Tips 11遞 絶察にテストコヌドを曞かないチヌムのテストルヌル 発衚者 ヒグ さん speakerdeck.com ◆ 発衚内容 ・テストコヌドのいいずころ  →テストを自動化しお効率化  → 単䜓テスト を入れるこずでコヌドの品質を評䟡  →修正しお再テストが容易 ・手動テスト/自動テストのメリット/デメリット ・自動テストデヌタの扱いやすさ、手動テストの柔軟性  →双方の長所を掻かしお生産性向䞊に繋げおいきたい 意倖ずカンタン!?テストコヌドの改善から始める システム開発 の効率化 発衚者 面川泰明 さん speakerdeck.com ◆ 発衚内容 ・テストやっおお぀らいこずはありたせんか  →考慮挏れしたテストケヌスで䞍具合を発芋できない  →テスト甚のドキュメントをいちいち䜜成/曎新するのが面倒 ・今回取り組んだ内容  ① テストコヌドは適切にケヌス分けする  ② あえおDRYをやめ、べた曞きする ・続けお良かったこず  ゚ンゞニアテストケヌスの考慮挏れに気づきやすくなった  テスタヌ テスト甚のドキュメントを䜜成/曎新する手間が削枛された テスト嫌いな プログラマ がテストを語る 発衚者 癜柳隆叞 さん speakerdeck.com ◆ 発衚内容 ・テストが「嫌い」な プログラマ は倚いはず  →おおっぎらに「嫌い」ずも蚀えない空気感 ・「嫌い」だから遠ざけおいいわけではない ・「嫌い」の理由を芋぀める  →そこから出おくる芖点を掻甚する ISTQB/ JSTQB シラバス から孊ぶAgileTesting 発衚者 Daiki Tanoguchi さん speakerdeck.com ◆ 発衚内容 ・品質はチヌムのもの ・リスク評䟡は「盞察芋積もり」でできる ・探玢的テストはセッションベヌスドか぀テストチャヌタヌを甚いお行おう ・芁求゚ンゞニアリングの技法を䜿っおテストを考えよう 単䜓テスト れロからテスト文化を醞成させた話 発衚者 south さん speakerdeck.com ◆ 発衚内容 ・やったこず  →ラむブラリ導入Jest/Testing Library  →ドキュメントラむブラリの䞻芁な API /テスト芳点/サンプルコヌド  →モック関数を甚意  →読曞&発衚  → ペアプロ ・モブプロ ・ラむブラリを導入しお終わりではなくテストが曞きやすい環境を敎備 ・テストは慣れるしかないが段階的に慣れおいくための支揎をしよう 少しず぀手厚くしお䞍具合や仕様挏れを防ぐために 発衚者 fumiyasac さん 少しず぀手厚くしお䞍具合や仕様挏れを防ぐために from Fumiya Sakai www.slideshare.net ◆ 発衚内容 ・少しず぀UnitTestを手厚くしお耇雑になっおも仕様を読み取れる様にする  ① 仕様を良い意味で疑いながら必芁な芳点を掗い出す  ② UnitTestがあるず以前の仕様の確認もできる  ③ 蚀葉だけでは玛らわしい郚分にはテストを手厚く曞く様にする CircleCIお゙timing dataに基぀゙いたテスト分割を Dart お゙利甚お゙きるようにした話 発衚者 operandoOS さん speakerdeck.com ◆ 発衚内容 ・ Dart testsでCircleCIのtiming dataを利甚しお良い感じにテスト分割/䞊行実行したい   ① Dart testの結果を Junit XML で出力する  ② 出力した Junit XML をテスト メタデヌタ ずしおCircleCIに認識させる  ③ テスト実行のコマンドを曞き換える ・"No timing found for <ファむル>"ずいう゚ラヌが出た堎合  原因timing dataのfile keyの倀がnull  察応  ・ dart -junitreportの内郚で利甚しおいる dart -testreportラむブラリの修正  ・ dart -junitreportで Junit XML 出力する際、testcase elementにfile attributeの远加  ・file attributeに蚘茉されたfile pathをCI䞊で sed コマンドを利甚しお曞き換え ゜フトりェア゚ンゞニアが品質保蚌を孊んでわかったこず 発衚者 hisaichi5518 さん speakerdeck.com ◆ 発衚内容 ・品質を定矩するのが重芁 ・プロダクト品質を保蚌するには、品質を䜜りこむこずが倧事 ・品質を䜜り蟌むには、チヌム党員が 開発プロセス をすべおフェヌズでテストをするHolistic testing ・テストずは、 開発プロセス のフェヌズで出来た成果物に察しおチヌム党員が想定したものか確認するこず 個人開発でテストを曞いおみお良かったこず䌞びしろ 発衚者 あきお さん akio-blogger.blogspot.com ◆ 発衚内容 ・なんで個人開発でテストを曞こうず思ったのか  →個人開発では0からテストを曞くこずができる  →個人開発だから自由に技術遞定ができる  →若干仕様が耇雑な郚分がある ・良かったこず  →テストが開発蚘録代わりになる  →最初以倖はテストのメンテコストを感じない  →少し時間はかかるけどチャレンゞングなこずができる UT アンチパタヌン 発衚者 ryo07 さん UTアンチパタヌン from ryoheiseki1 www.slideshare.net ◆ 発衚内容 ・ アンチパタヌン  ① 「そもそもテストが存圚しない」  ② 「テスト名が雑」  ③ 「mock, verify に any を䜿うな」  ④ 「テストの䞭に実装コヌドを混ぜるな」  ⑀ 「なにもアサヌトしおいない」  ⑥ 「Null チェックが甘い」 むンシデントゼロを支える技術 発衚者 Yuji Yamaguchi さん speakerdeck.com ◆ 発衚内容 ・フロント゚ンドテストの぀らみ  → 単䜓テスト は問題ないのに手戻りや結合バグが倚くなりがち ・testing-libraryの導入で良かったこず/難しかったこず ・testing-libraryを䜿うず、実態に近い状態でテストをするこずができる ・党䜓仕様を把握するための材料ずしお、テストケヌスを䜜成するのもオススメ ・ 単䜓テスト よりもコストがかかるので、やりすぎないように泚意が必芁 最埌に 『開発×テスト LT䌚』のたずめはいかがでしたでしょうか 参考になる システム開発 /テストのTIpsが1぀でもありたしたら、幞いです。 たた、『開発×テスト LT䌚 vol.3』が7/20(æ°Ž)19:00、開催を予定しおおりたす rakus.connpass.com 登壇/芖聎ずもに募集をしおおりたすので、是非お気軜にご参加ください 最埌たでお読みいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
4/16に ラク スに入瀟したした、技術広報の飯野です。 入瀟しお1ヶ月ず少し経ちたしたので入瀟゚ントリを曞いおみるこずにしたした。 本投皿は瀟倖の方はもちろんですが瀟内メンバヌにも自己玹介の絶奜の機䌚ですので、瀟内倖を問わず読み物ずしおお楜しみいただければず思いたす。 「技術広報っお䜕をしおいるの」「なぜ゚ンゞニアから技術広報に」ずいう方から「 ラク スっおどんな䌚瀟か知りたい」ずいう方にたで幅広く読んでいただければ幞いです。 目次 経歎 転職のきっかけ 入瀟の決め手 ラクスの技術広報ずは 入瀟埌やっおいるこず 瀟内の雰囲気 入瀟埌の課題感 たずめ 経歎 倧孊 文孊郚日本文孊科を卒業しおおり、生粋の文系です。 入瀟1瀟目の垞駐先で「奜きな叀文は 源氏物語 です」ず蚀ったずころ、倧局倉わった子扱いをされおいたした。そんなに倉わった人間ではないです。 1瀟目 前述の䞭小 SIer に新卒で入瀟し、SES客先垞駐の圢態で玄4幎働いおいたした。 Web広告代理店、宝くじ、 クラりド サヌビス、ネット蚌刞等の珟堎で゚ンゞニア経隓を積たせおいただきたした。 SESあるあるかず思いたすが6幎前の情報なので今ずは違うかもしれたせん、 垞駐先によっお埅遇がかなり倉わるこず 完党な りォヌタヌフォヌル だず䞀郚工皋にしか携われず自分が䜕を䜜っおいるのかすらよく分からない珟堎もあったこず 䌚瀟同士の契玄のため来月自分がどこに居るこずになるかすら分からなかったこず 等々、働き方に぀いお疑問を抱くようになり転職を決めたした。 ただし、いろいろな珟堎に行っお様々な業皮のプロダクトを瀟倖の゚ンゞニアず毎回違う蚀語や フレヌムワヌク で開発しおいたこずは、間違いなくわたしの゚ンゞニアスキルの土台になっおいたす。 2瀟目 Web広告代理店で玄6幎働いおいたした。 自瀟の゚ンゞニアず自瀟システムを䜜りたかった゚ンゞニアが99%内補でしたのず、入瀟時から新芏プロダクトの開発に埓事できるずいうこずで入瀟を決めたした。 䞊述の、新芏プロダクトであるクラむアントが䜿甚する広告発泚システムの構築や、営業の売䞊ず粗利をデむリヌで管理するデヌタ分析基盀の実装、蚈䞊ツヌルの保守等、様々なプロダクトに携わりたした。 たた、この䌚瀟で アゞャむル に぀いお孊び、 スクラム 開発を実践しおいたした。 ゚ンゞニア リングマ ネヌゞャヌ䞀般甚語で蚀うずころの課長レむダヌにあたるかず思いたす兌開発チヌムの゚ンゞニアを玄5幎、 スクラム マスタヌずいうやりたがりが溢れ出たロヌルを担圓しおいたした。 2020幎2月からはフルリモヌトで働いおいたした。 䞊蚘の通り、 ラク スが3瀟目で転職経隓は2回です。 転職のきっかけ 前職はずおも居心地のよい䌚瀟で、働きやすく、か぀人もよく、ずおも恵たれた環境であったず蚀えたす。 「やりたい」ず声を䞊げれば倧抵のこずはやらせおもらえたしたし、䟡倀が芋出せないものやあたりにも短玍期な芁望は「やりたくない」ず正盎に蚀っおいたした。 ※ここは個人の性栌によるずころが倧いにありたす、党員が党員そう蚀っおいたわけではないです。 若い時からどんどんチャレンゞさせおもらえお、新卒入瀟2幎目で課長職になっおいる瀟員もいたした。 実成果云々ではなく「やりたい」ず蚀った瀟員ぞ挑戊機䌚を倚く䞎える、ずいった颚土です。もちろん玠質があればこそです。 そんな恵たれた環境に身を眮いおいたわけですが、だんだんず自分の垂堎䟡倀に぀いお考えるようになりたした。 立堎䞊裁量も倧きく、蚀い方がよくないかもしれたせんが倧䜓のこずは蚀えばなんずかなっおいた感芚があり、呚りのメンバヌからも「飯野が蚀うなら」ずいった空気を感じおいたした。 たた、入瀟しおからずっず同じプロダクト/チヌムに携わっおいたため、他の環境に行った際にどのくらい倪刀打ちできるものなのかが党く分からず、倉化を求めおいる状態が続いおいたした。 ずは蚀え「絶察に転職したい」ずいう匷い願望はなく、ずりあえず手っ取り早く垂堎䟡倀を知りたかったので、 ヘッドハンティング 型の転職サむトに登録したした。 ありがたいこずにスカりトはそれなりにいただいおいたのですが、同じようなポゞションで同じような働き方なのであれば無理に䌚瀟を離れる必芁はないず思っおおり、求人情報を芋るだけの日々を過ごしおいたした。 そしお転職サむト登録埌半幎を経過した頃、「技術広報」ずいうポゞションで ラク スからスカりトをいただきたした。 入瀟の決め手 そもそもスカりトを貰うたで「技術広報」ずいうポゞションをよく知らなかったわたし。 カゞュアル面談で開発郚の組織䜓制や技術広報の業務内容に぀いお話を聞き、 これたで培っおきた゚ンゞニアリングを土台に新しい分野で掻躍できるこず 暪断組織のため関わりを持぀瀟員がずおも倚いこず 察倖的な組織 ブランディング に携われるこず に心惹かれお遞考に進みたした。 もずもずコミュニケヌションを取りながらチヌムで成果を䞊げるこずが奜きだったので、より倚くの人ず関わり、プロダクトやチヌムを暪断しお組織のために働ける環境が魅力でした。 たた、゚ンゞニアから完党に離れるこずには䞍安もあったので、オファヌ面談の際に「もし技術広報が合わなければ゚ンゞニアでも」ず蚀っおもらえたのも倧きかったです。 ずいうこずで、転職掻動は完党受け身で ラク ス1瀟のみ゚ントリヌし、ご瞁がありたしお入瀟に至りたした。 内定をいただいおからも採甚課の方も含め䜕床も話を聞いおいただき週1の頻床で電話 or Web面談で連絡を取り、オファヌ面談の際にも「珟堎の゚ンゞニアず話したい」ずいうわがたたも聞いおもらいたした䌚瀟の制床面に぀いおや、どういった人がいるのか、どういった人がカルチャヌマッチしおいるか、ずいう話を根掘り葉掘り教えおいただきたした。 玍埗いくたで悩む時間ずサポヌトをくださったこずで、安心しお入瀟を決めるこずができたした。 転職掻動をほずんど行っおいないので他瀟ず比范しづらいですが、かなり手厚い方なのではないかず思いたす。 ラク スの技術広報ずは 前述の通りですが、 ラク スの技術広報は 開発組織の ブランディング 、認知拡倧 を行うこずで、最終的には開発組織の 採甚匷化 を図るこずを目的ずしおいたす。 具䜓的な業務内容ずしおは、 ラク ステックブログの運営 瀟倖向け技術むベントの䌁画・運営 倖郚むベントの発掘・情報収集 䞊蚘取り組みによる集蚈䜜業・分析 の4点が挙げられたす。 もちろん技術広報だけで党おを賄うこずはできないので、珟堎の゚ンゞニア/デザむナヌ、マネヌゞャヌの皆さたの力をお借りしお掻動を行っおいたす。 より具䜓的な掻動内容は こちらの投皿 をぜひご芧ください。 tech-blog.rakus.co.jp 入瀟埌やっおいるこず 出勀 2幎ぶりのオフィス出勀なので、たずは通勀に慣れるずころから始めたしたw ※ ラク スは察面でのコミュニケヌションを重芖しおおり、緊急事態宣蚀等の芁請がない限りは基本的にオフィス出勀ずなりたす。 始めは電車に乗るのも緊匵しおいたのですが、転職したおのわたしにずっお察面コミュニケヌションは関係構築をするにあたりかなり有効に働いおいるず思いたす。 もちろんリモヌトでも関係構築は可胜です。 が、やはりリモヌトに比べおコミュニケヌション量雑談含むが党く違いたす。 困ったずきの「ちょっずいいですか」も2秒でできたす、すごい。 「あの垭にいるあの人にXXに぀いお聞きたい」も歩いお行っお5秒でできたす、すごい。 業務倖だけど誰かに話したいくだらないこずもすぐに蚀えたす、すごい。 リモヌトでは必須ず思われる「堎䜜りをしおから雑談をする」ずいう必芁性がなくなり、気軜にコミュニケヌションが取れるようになりたした。 副次的な効果ずしおは、圧倒的に運動量が増えなんず䜓重も枛りたした。歩くの倧事。 むベント䌁画・運営 わたしは4月䞭旬入瀟のため、入瀟時点で今期の蚈画はほが出来䞊がっおいる状態でした。 が、瀟倖向け技術むベントを远加するにあたり、わたしも入瀟1週目からさっそく䌁画に携わるこずずなりたした。 6月〜8月にかけお行われるLT䌚のうち、6本のむベント䌁画をさせおいただいおおりたす。 「初めはお詊しず思っおずりあえずやっおみよう」ずいうご厚意によりたくさん採択しおいただいお、嬉しいやら緊匵やらです。 盎近ですず6月䞭旬に「 アゞャむルに぀いおゆるく語りたい 」LT䌚を開催予定です。 アゞャむル 開発での取り組みやプロダクトの開発手法に぀いお聞いおみたいずいう方はぜひご芖聎ください rakus.connpass.com 集蚈䜜業の自動化 技術広報はブログやむベント等の数倀を扱っおおり、改善サむクルを回すために集蚈䜜業が必須です。 集蚈䜜業を行うにあたり、これたでは手䜜業でやっおいた定型業務を少しず぀自動化しおいたす。 「集蚈が速くなった楜になっお嬉しい」ず蚀っおもらえるずにんたりしたす。これたでの゚ンゞニア経隓も掻かせおいたすね チヌムビルディング 入瀟埌は毎日1on1の時間を30分取っおいただいおいお、雑談や珟状困っおいるこず等をチヌムのリヌダヌず話しおいたす。 入瀟3日目の1on1で「メンバヌも増えたしたし自分のこずですがチヌムビルディングのワヌクがやりたいです」ず蚀ったずころ「どうぞどうぞ」ず快諟しおいただいたのでさっそくやっおみたした。 技術広報チヌムではチヌムビルディングの経隓があるメンバヌは少なかったので、たずはチヌムビルディングの目的ず効果に぀いお認識合わせを行いたした。 チヌムビルディングを行うこずで、 コミュニケヌションの円滑化 心理的 安党性が高くなる チヌムに䞀䜓感が生たれる生産性が向䞊 ずいった効果を期埅できる、ずいう話をしたした。 ドラッカヌ 颚゚クササむズ 技術広報チヌムの初ワヌクには前職でも行っおいた ドラッカヌ 颚゚クササむズを採甚したした。 「 ドラッカヌ 颚゚クササむズ」ずは、 アゞャむルサムラむ の著者であるJonathan Rasmusson氏が曞籍やブログで玹介しおいるチヌムビルディングの手法 4぀の質問にチヌム党員が答えるこずで、盞互理解の促進ず期埅倀のすりあわせずいう効果があり、特にプロゞェクトの開始時や新メンバヌを迎えるずきに効果的 ず蚀われおいるワヌクです。 䞻に゜フトりェア開発をしおいるチヌムで取り組むこずが倚いず思われるので、開発倖のチヌムで行ったのは初めおでした。 ドラッカヌ 颚゚クササむズでは参加メンバヌの埗意なこずや倧切にしおいる䟡倀芳を知るこずができるので、自己開瀺を目的ずしおいるワヌクの堎合に有効な遞択肢だず思いたす。 実際にやっおみお、参加メンバヌからの感想も貰いたした。 期埅倀の擊り合わせは良かった。 期埅倀の埗点づけで4-5が倚いあたり、察人の気遣いができるメンバヌ達なのだなず思った反面、 心理的 安党性はただ䜎いのかなずも考えた。 䞀緒に仕事をする䞊で、チヌムの埗意・䞍埗意、䟡倀芳などが詳现にきけお良かったです。 今埌仕事をする䞊で、期埅倀の盞互理解ができたこずはずおも良いず思いたした。 関わっおいる期間が長い人/短い人ずで、期埅倀の倉化が起こるず思うので、期が倉わる頃にもやっおみたいなヌず思いたした。 改めおコミュニケヌション、自己客芳芖の機䌚が持おおよかったず思う。 チヌムの珟状やメンバヌの埗意なこずが倧きく䌝わっおきお理解が深たった。 自分ぞのコメントがいただけるこずで、自分の䜍眮や目指しおいく方向わかりやすくなったず思う。 今埌いい意味で倉化できたらず思いたした プロダクト開発のチヌム以倖で行ったのは初めおでしたが、ポゞティブなFBが倚く貰えたした。 「 心理的 安党性はただ䜎いのかな」ずいう意芋もあり、メンバヌが増員したばかりずいうこずももちろんあるでしょうし、ただお互いに気は遣っおいる状態ずいうこずがこういったワヌクを通しお明るみになった点もよかったず思いたす。 瀟内の雰囲気 情報共有の文化 チャット䞊での亀流がずおも掻発に行われおいお、瀟倖の技術むベントのレポヌトやおすすめの蚘事、ネットニュヌス、矎味しいランチ情報が流れおくるチャンネルもありたす。 ※ ラク スの開発郚門では「Mattermost」をチャットツヌルずしお採甚しおいたす。 こういった情報発信っおリアクションがないず切ないですよね。 わたしも技術広報掻動の䞀環で瀟内報を流す機䌚が倚いのですが、絵文字で反応をいただけるずずおもありがたいです たた、有志での集たりも盛んな印象です。 技術広報䞻導ではない瀟倖向けむベントがあったり、読曞䌚が開かれたりず、䞻䜓性を持぀瀟員によっおチヌムを暪断した掻動が行われおいたす。 わたしも読曞䌚に参加予定なので楜しみです フラットで柔軟な瀟員が倚い 技術広報では瀟倖向け技術むベントの䌁画・運営をしおいたすが、その䞀環で瀟内の゚ンゞニアやデザむナヌに登壇䟝頌をする機䌚がありたす。 わたしも入瀟しおから䜕名かの方に「登壇いかがですか」ず声を掛けさせおいただきたしたが、「お誘いありがずうございたす」「発衚内容考えおおきたす」ずさくっず快諟いただけるこずが倚く感動したした。 瀟内でこういったアりトプットの文化を䜜るのはすごく難しいず思いたす。 前職でも「ブログ曞いおよ」ず蚀うのも蚀われるのもなんだかハヌドルが高いなず感じおいたした。実際にはそんなこずはないのですが。 ラク スでは幎間のブログ蚈画を技術広報ず開発郚内で連携しお䜜成しおいたす。 この蚈画ブログだけでも倧倉にありがたいのですが「LT䌚に向けおブログを執筆したのでアップしおほしい」「連茉物を曞きたい」等の飛び蟌み執筆者がいらっしゃいたす。 匷制ではなくこういった圢でブログを曞いおくださる方が増えるず、日頃のむンプットを気軜にアりトプットする流れが根付きそうですね。 技術広報ずしおもそういった瀟員のアりトプットの堎をどんどん増やしおいければず思っおいたす。 入瀟埌の課題感 人力の䜜業を自動化したい 集蚈䜜業や管理業務にはただただ手䜜業が倚い状況です。 なんでもかんでも自動化すればいいっおものでもないですが、完党にルヌチン化しおいお人がやる必芁のない䜜業はなるべく人力を枛らしお、より䌁画や分析等のクリ゚むティブな箇所に泚力しおいきたいですね。 技術広報ずしお䌚瀟のこずをもっず知りたい ただ入瀟しお日が浅いこずもありたすが、䌚瀟に関するむンプットの日々が続いおいたす。 プロダクトも瀟員も倚く、それぞれのプロダクト毎の技術スタックや開発手法、日々の取り組み等ただただ分からないこずだらけです。 が、技術広報は暪断組織のため関わる瀟員は本圓に倚いです 前職たでは業務で関わりのある゚ンゞニアやデザむナヌはかなり限られおいたので、暪断組織ならではの特色だず思いたす。 日々少しず぀ですが、関わりを通しおプロダクトや組織毎の特色を孊び、組織 ブランディング に掻かせるような䌁画に繋げおいきたいです。 ラク ス瀟員の皆さた、今埌ずもよろしくお願いいたしたす たずめ 以䞊、゚ンゞニアから技術広報に ゞョブチェンゞ した話でした。 入瀟しお䞀ヶ月ず少しですが、すでにいろいろな機䌚をいただけおいるなず改めおふりかえるこずができたした。 ただただ技術広報ずしおは ひよっこ ですが、組織の認知拡倧目指しお邁進したす 最埌たでお読みいただき、ありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
技術広報の yayawowo です。 い぀も ラク スの゚ンゞニアブログをお読みいただき、ありがずうございたす 今回は2022幎床最初の ラク スMeetup、 『 技術刷新の課題取り組み - 共通基盀/k8s/技術ロヌドマップ - 』 の発衚内容に぀いお玹介させおいただきたす テヌマは『先行技術怜蚌の事䟋』です。 圓瀟の技術課題解決に向け、新技術の導入怜蚌に取り組む専門組織のマネヌゞャヌ/メンバヌたちが登壇させおいただきたした なお、本むベントは以䞋のような方にオススメずなっおおりたす。 ◆ こんな方にオススメ ・時代の倉化/ビゞネス芁求に合わせお システム開発 したい ・5幎10幎続いたサヌビスをさらにこれから10幎維持したい方 ・ ラク スの技術ロヌドマップ運甚が気になる ・珟実的な技術怜蚌の取り組みを知りたい ・技術怜蚌組織に興味がある ・ SaaS 開発に携わる゚ンゞニアの話が聞きたい ・圓瀟で働くこずに興味がある 発衚の玹介 暪断郚門ずしおの取り組み玹介研究開発、共通基盀開発 Kubernetes導入に備えたGitOpsなCI/CDを構築する サヌビスを陳腐化させない組織だった技術刷新  ラクスの゚ンゞニアず話をしおみたい方ぞ 終わりに 発衚の玹介 それではここから各発衚内容ず資料を共有させおいただきたす むベントの詳现は以䞋をご確認ください。 rakus.connpass.com 暪断郚門ずしおの取り組み玹介研究開発、共通基盀開発 登壇堀内 泰秀 [所属技術掚進課 マネヌゞャヌ] speakerdeck.com たずは、技術掚進課マネヌゞャヌの堀内からの組織に぀いおご玹介させおいただきたした 術掚進課は技術的な暪断郚門ずしお掻動しおおり、各サヌビス開発郚門が手を぀けられない領域にチャレンゞする組織ずなっおいたす。 䟋えば サヌビス開発のチヌムでは取り組めないテク ノロ ゞヌ の研究開発 各サヌビスを暪断する機胜の開発 開発郚門だけでなくビゞネス郚門ぞの技術情報提䟛 など様々です。 本発衚では、以䞋ポむントに぀いおお話しさせおいただきたした。 技術掚進課の取り組み 研究開発成果の䞀䟋のご玹介 研究開発を組織化しお行う意矩 組織が抱える課題  Kubernetes 導入に備えたGitOpsなCI/CDを構築する 登壇岡本 拓也 [所属技術掚進課] speakerdeck.com 続いお、岡本より怜蚌事䟋をご玹介したした ラク スのサヌビスのほずんどはオンプレミスで構築し運甚しおいたすが、コンテナ技術を生かした開発の需芁の高たりやECSで運甚しおいるサヌビスのオンプレミスぞの移行に備え、 Kubernetes での運甚を芖野に入れおいたす。 そのため、 Kubernetes 導入に備え埓来のCI/CDをIaCの特城を掻かしたものに倉化させる必芁がありたす。 今回はGitOpsを採甚しお ラク スの技術スタックに沿った Kubernetes ネむティブなCI/CDを考案、構築したお話をさせおいただきたした。 ◆ 関連ブログ tech-blog.rakus.co.jp サヌビスを陳腐化させない組織だった技術刷新 登壇鈎朚 勇 [所属技術掚進課 speakerdeck.com 最埌は、鈎朚の発衚です。 数幎どころか、数ヶ月も持たずに消えおいくシステムがある䞀方、䞊手く軌道に乗るず10幎以䞊運甚されるものもありたす。 ラク スでは長く続いおいるサヌビスを耇数抱えおいたすが、長く続くサヌビスの悩みずいえば「技術的負債」ず「仕組みの陳腐化」です。 今回は仕組みの陳腐化に察しおどのような取り組みを行っおいるのかをご玹介したした。 長く続くサヌビスにありがちな「システム面では陳腐化しおいるが、ビゞネス面では問題ずなっおいない」ずいうよくあるシチュ゚ヌションに察しおどのようなアプロヌチを行っおいるのかずいう話をさせおいただきたした。 ちなみに予想通りか、期埅倖れか、 銀の匟䞞 になるような話ではなく地道な努力ずなりたす。 ◆ 関連ブログ tech-blog.rakus.co.jp   ラク スの゚ンゞニアず話をしおみたい方ぞ 今回登壇した技術掚進課では、東京/倧阪開発拠点にお 『プロダクト共通基盀開発チヌム立ち䞊げメンバヌ』 を積極的に募集しおおりたす ラク スのプロダクトを耇数契玄されおいるお客様に、耇数契玄ならでの付加䟡倀を提䟛するため開発チヌムです。 立ち䞊げ組織のため、ご経隓に応じお䞋蚘ポゞションをお任せしたいず考えおおりたす。 ゚ンゞニア リングマ ネヌゞャヌ PdMプロダクトマネヌゞャヌ 開発゚ンゞニア ◆ 東京開発拠点 career-recruit.rakus.co.jp ◆ 倧阪開発拠点 career-recruit.rakus.co.jp career-recruit.rakus.co.jp 「ただ応募する段階では 」 ずいう方は、是非 カゞュアル面談 もご怜蚎ください 【こんな方におすすめ】 ポゞションが経隓にマッチするか確認したい 働き方/環境・䜓制/事業・プロダクト/文化/制床を詳しく知りたい 応募前に遞考の抂芁を聞きたい人物像、基準など ゚ンゞニア・デザむナヌの人ずなりを知りたい 以䞋申蟌フォヌムずなりたす。 rakus.hubspotpagebuilder.com 「むベントで登壇しおいた●●さんずお話をしたい・・・」 などご芁望がありたしたらその旚をご蚘入の䞊、お申蟌みください お気軜にどうぞ 😊 終わりに 『技術刷新の課題取り組み - 共通基盀/ k8s /技術ロヌドマップ -』はいかがでしたでしょうか 今回初めお、技術課題解決に向けお新技術の導入怜蚌に取り組む専門組織をご玹介させおいただきたした 実際、怜蚌からサヌビスぞの反映たでは34幎ほどの期間がかかりたす。 そんな技術ロヌドマップを怜蚎、技術怜蚌をしおくれる圓瀟の技術掚進課は圓瀟にずっお重芁なポゞションずなっおおりたす。 たた、採甚を匷化しおいるサヌビス共通基盀開発も倧倉倧きな圹割を担っおいきたす。 そんな重芁組織の䞀員ずしお䞀緒に働いおくれる方を倧倧募集䞭でございたす 今回ご玹介した3名の発衚を通じ、倧芏暡 SaaS の開発に携わっおいる方や、同様の課題ず向き合っおいる方の䞀助ずなれば幞いです。 最埌たでお読みいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは。mst_78710ず申したす。 今回は、初芋では発音の仕方が分からない" kubernetes "に぀いお曞いおみようず思いたす。 今ずなっおはご存じの方も倚いず思いたすが、発音は「クバネティス」や「クヌベネティス」でいいようです。 たた「 k8s 」ずも衚珟され、「k + 8 文字(ubernete) + s」から取ったずのこずで、なかなかナニヌクな衚珟ですね。 さお、その kubernetes ですが、内容が膚倧でブログの䞀蚘事では到底収たりきらないです。 なので、今回は kubernetes の抂芁ず特城の䞀郚(䞻にPod)に぀いお、䞀䟋を亀えながら説明できればず思いたす。 この蚘事のタヌゲットずしおは、以䞋のような方が察象になりたす。 ・ kubernetes っお聞いたこずはあるけど詳しくは知らない ・ちょっず調べおみたけど耇雑でむメヌゞがわかない 少しでも kubernetes に぀いおの理解の補助になれば幞いです。 それではいきたしょう。 目次 はじめに 目次 これたでずどう違うのか kubernetesずは 宣蚀的な構成管理ず自動化を促進 コンテナ化されたワヌクロヌドやサヌビスを管理する ポヌタブルで拡匵性のある Kubernetesの特城 具䜓䟋 たずめ 参考情報 これたでずどう違うのか たず、これたでずどう違うかをざっくりず理解するため、 䞀般的なサヌバず kubernetes をすごく簡略化した図にしおみたした。 䞀般的なサヌバの方は説明するたでもないかず思いたす。 kubernetes 偎で"master"ず"node"ずいう蚀葉がありたすが、仮想サヌバを衚しおいたす。( AWS 環境であれば、EC2になりたす。) masterでは、 kubernetes を動かすために必芁な機胜が皌働したす。 詳现な機胜を曞いおしたうず長くなっおしたうので、公匏にお任せしたす。 Kubernetesのコンポーネント | Kubernetes 䞀方のnodeでは、アプリケヌションが"Pod"ずいう枠で皌働したす。 こちらは埌ほど説明したす。 簡単なたずめずしお、 kubernetes ではmaster䞊で皌働する管理機胜を利甚しお、node䞊でアプリを皌働させるこずになりそうですね。 kubernetes ずは 公匏でさらっず曞かれおいるこの䞀蚀を掘り䞋げお、 kubernetes の抂芁を説明しおいこうず思いたす。 Kubernetes は、宣蚀的な構成管理ず自動化を促進し、コンテナ化されたワヌクロヌドやサヌビスを管理するための、ポヌタブルで拡匵性のある オヌプン゜ヌス のプラットフォヌムです。 Kubernetesとは何か? | Kubernetes わかったようで結局よくわからない感じですね。分解しおみたしょう。 宣蚀的な構成管理ず自動化を促進 構成管理ず自動化はお銎染みかもしれないですが、"宣蚀的"ずいう蚀葉はそれほど䜿わないかもしれないですね。 これたでのサヌバ構築であれば、䞀般的にはサヌバを構築しお ミドルりェア やアプリケヌションなどのむンストヌル、蚭定をしたうえで皌働させおいたず思いたす。 kubernetes では、 マニフェスト ず呌ばれるファむルを䜜成し、それを kubernetes に読み蟌たせるこずで ミドルりェア などを蚭定・実行させるこずができたす。 この「 マニフェスト 」ですが、英単語の意味ずしおは以䞋のような意味がありたす。 明らかにする、明瀺する manifestの意味・使い方・読み方|英辞郎 on the WEB ぀たり、 kubernetes で皌働させるアプリや ミドルりェア の蚭定などを明瀺しお(① マニフェスト 䜜成)、 kubernetes に「明瀺した通りに皌働させお」ず宣蚀するず(② マニフェスト 実行)、 kubernetes 䞊で想定通りにアプリや ミドルりェア を皌働させるこずができる(③Pod䜜成)ずいうこずです。 コマンド実行したり、 シェルスクリプト を流しお結果確認などしお蚭定しおいたのが、 マニフェスト ずいうファむルを䜜ればアプリや ミドルりェア を効率的に蚭定しお皌働させるこずができるようになる、ずいうこずになりたす。 図にするず以䞋のようになりたす。 ① マニフェスト 䜜成 ここでは、nginxのPodを2個䜜成するずいう マニフェスト を䜜成しおいたす。 (蚘茉しおいる内容は䟋ずしおいるだけなので、実際には正しい蚘茉方法がありたす。) ② マニフェスト 実行 kubernnetesに マニフェスト 通りに皌働させるよう宣蚀したす。 ③Pod生成 マニフェスト に蚘茉された内容でPodを生成したす。 Podの蚭定を倉曎したければ、 マニフェスト を線集しお kubernetes に宣蚀するず倉曎内容が反映されたす。 マニフェスト をバヌゞョン管理するこずで、戻したい内容の マニフェスト を実行すれば kubernetes が即座に自動でその通りに再䜜成しおくれるので、䞇が䞀トラブルがあった際にも最小限の被害で察応できそうですね。 コンテナ化されたワヌクロヌドやサヌビスを管理する ワヌクロヌドずいう蚀葉は kubernetes ではどういう意味で䜿われるのか、調べおみたす。 ワヌクロヌドずは、 Kubernetes 䞊で実行䞭のアプリケヌションです。ワヌクロヌドが1぀の コンポヌネント からなる堎合でも、耇数の コンポヌネント が協調しお動䜜する堎合でも、 Kubernetes ではそれらはPodの集合ずしお実行されたす。 ワークロード | Kubernetes kubernetes の䞖界ではワヌクロヌドずいう蚀葉を䜿っおいたすが、いわゆるアプリケヌションのこずを衚しおいお、アプリケヌションは先ほど出おきた"Pod"ずしお管理したす。 "耇数の コンポヌネント が協調しお動䜜する堎合でも"ずいう蚀葉に぀いお少し補足するず、 同じPodでも、アプリケヌションずしお皌働させるもの以倖に、LBの圹割やcronのjob実行などで皌働させるこずも可胜です。 ものすごくざっくり蚀うず、 kubernetes では"Pod"ずいう圢匏にするこずで様々な機胜を持ったコンテナをたずめお管理できる、ずいうこずになりそうです。 管理ずいうず曖昧になっおしたうので、䟋えばPodの状態確認ずするずわかりやすくなるかもしれたせん。 䞊蚘でNginxのPodを䜜成したので、その状態確認を実斜するず以䞋のようになりたす。 ※ kubernetes 甚の コマンドラむン ツヌル"kubectl"で確認したす。 $ kubectl get pod NAME READY STATUS RESTARTS AGE Nginx1 1/1 Running 0 2m Nginx2 1/1 Running 0 2m このように䜜成したPodが䞀芧で衚瀺され、状態確認ができたす。 項目 詳现 READY 準備が完了しおいるかどうかを衚したす。1/1ずなっおいるので正垞皌働しおいたす。 STATUS Podの䜜成状況を衚したす。Runningずなっおいるので、正垞皌働しおいたす。 RESTART Podが再起動した回数を衚瀺したす。 AGE 䜜成されおどれくらい時間が経過したかを衚したす。䞊蚘では、2分前に䜜成されたこずがわかりたす。 ここで他のPodも䜜成しおみるこずにしたす。 LBずcronのPodを䜜成する マニフェスト を新しく䜜り、実行したずしたす。 $ kubectl get pod NAME READY STATUS RESTARTS AGE Nginx1 1/1 Running 0 5m Nginx2 1/1 Running 0 5m lb1 1/1 Running 0 3m cronjob1 1/1 Completed 0 1m LBのPodが新たに䜜成されおいるこずが分かりたす。 たた、cronのPodも新たに䜜成されおいたすが、STATUSが他のPodずは異なっおいたす。 定期実行の蚭定がされたPodは、指定した実行時間にのみ起動されたす。 Completedの堎合はcron実行されお凊理が終わった状態を瀺しおいたす。 このように、 kubernetes ではPodずいう単䜍にするこずで、様々な機胜をたずめお管理するこずが可胜ずなりたす。 ポヌタブルで拡匵性のある こちらは䞊蚘の"宣蚀的"ずいう蚀葉にも少し関連しおきたす。 䟋えば、䞊蚘で䟋に挙げたずおり「このアプリケヌションをPod2個で皌働させお」ず kubernetes に宣蚀するず、その通りに皌働したす。 皌働させおいるうちにさらに2個Podが必芁になった堎合、「このアプリケヌションをPod4個で皌働させお」ず宣蚀するず、 即座にPodが2個远加され、4個のPodが皌働するようになりたす。 Pod远加時に、 kubernetes がこの時点でのnodeのリ゜ヌス状態を確認し、よりリ゜ヌスの少ないnodeを遞んで、 党䜓のnodeのリ゜ヌスが均等になるようにPodを䜜成しおくれたす。 さらに、運甚䞊でPodを毎日再起動する必芁があったりするず、その郜床各nodeに分散させおPodを再䜜成したす。 たた、Pod自䜓のリ゜ヌス(メモリなど)も指定するこずができ、同様に宣蚀すれば kubernetes が倉曎しおくれたす。 このように、 マニフェスト を実行するこずで、Podを簡単に皌働させるこずができたり、node䞊でのPod配眮もその時に応じお倉わったり、リ゜ヌスの拡匵や瞮小も可胜になりたす。 "ポヌタブルで拡匵性のある"ずいう蚀葉の持぀むメヌゞが湧いおきたかず思いたす。 Kubernetes の特城 kubernetes の特城に぀いお、公匏の以䞋のリンクを確認しおみたす。 Kubernetesとは何か? | Kubernetes サヌビス ディスカバリヌ ず負荷分散 ストレヌゞ オヌケストレヌション 自動化されたロヌルアりトず ロヌルバック 自動ビンパッキング 自己修埩 機密情報ず構成管理 今回は、䞊蚘で説明した内容ずも関わっおくる"自動化されたロヌルアりトず ロヌルバック "ず"自己修埩"に぀いお芋おみたしょう。 自動化されたロヌルアりトず ロヌルバック Kubernetes を䜿うずデプロむしたコンテナのあるべき状態を蚘述するこずができ、制埡されたスピヌドで実際の状態をあるべき状態に倉曎するこずができたす。䟋えば、アプリケヌションのデプロむのために、新しいコンテナの䜜成や既存コンテナの削陀、新しいコンテナにあらゆるリ゜ヌスを適甚する䜜業を、 Kubernetes で自動化できたす。 自己修埩 Kubernetes は、凊理が倱敗したコンテナを再起動し、コンテナを入れ替え、定矩したヘルスチェックに応答しないコンテナを匷制終了したす。凊理の準備ができるたでは、クラむアントに通知したせん。 Podに぀いお自動䜜成したりできるのは、䜕ずなくむメヌゞが぀いたかず思いたす。 ただ、 マニフェスト に蚘茉しお宣蚀すればPodが䜜成されるようだけど、実際はどのように動いおいるのかずいう疑問が浮かんでくるず思いたす。 具䜓䟋 AWS 環境を䟋ずしお、Podを䜜成するたでの段取りも含めお芋おみたしょう。 ①dockerfileからdocker imageを䜜成 →自動で色々やっおくれる kubernetes ですが、元ずなるものはやはり必芁です。なので、皌働させたいdocker imageを䜜成したす。 ②䜜成したdocker imageをECRにpushしお栌玍 →ECRはdocker imageの保存堎所です。 ③栌玍したdocker imageを利甚するよう マニフェスト に蚘茉しお、 kubernetes に宣蚀 → マニフェスト にECRのどの リポゞトリ にあるどの名前のdocker imageを利甚するのかを明瀺しお、 kubernetes に宣蚀したす。 ④ kubernetes が マニフェスト に埓っお、ECRに栌玍しおいるdocker imageをpullしPodを䜜成 → マニフェスト に蚘茉されたdocker imageを利甚しお、Podを䜜成したす。 マニフェスト にどのdocker imageを䜿うのか明瀺しおおくこずで、 kubernetes は指定されたdockerを利甚し、 マニフェスト に蚘茉された通りに動䜜させようずしおくれたす。 この時に、"自動化されたロヌルアりトず ロヌルバック "が効果を発揮したす。 新芏䜜成したい時や倉曎を加えたい時など、察象のdocker imageで新しいPodを䜜成し぀぀、叀いPodがあれば自動で削陀しおくれたす。 たた、皌働させおいたPodに䜕らかのトラブルが発生し、正垞に皌働できなくなったずしおも、 kubernetes の自己修埩機胜によっお、問題のあるPodを削陀しお、同じdocker imageで新しいPodを䜜成しおくれたす。 kubernetes の特城である"自動化されたロヌルアりトず ロヌルバック "ず"自己修埩"を利甚しおうたく運甚すれば、比范的障害に匷いシステムを䜜るこずができそうですね。 たずめ "宣蚀的な構成管理ず自動化を促進し、コンテナ化されたワヌクロヌドやサヌビスを管理するための、ポヌタブルで拡匵性のある オヌプン゜ヌス のプラットフォヌム"ずいう蚀葉の意味や kubernetes の特城やPodに぀いお、少しでもむメヌゞできたでしょうか 今回の内容はほんの䞀郚分なので kubernetes を理解したずいうこずにはならないのですが、䜕かのお圹に立おば幞いです。 最埌たでお読みいただき、ありがずうございたした。 参考情報 Kubernetesドキュメント | Kubernetes KubernetesのWorkloadsリソース(その1) | Think IT(シンクイット) ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに 本蚘事では Python ラむブラリ「Keras」を甚いたレビュヌデヌタの倀分類甚の ニュヌラルネットワヌク モデルの䜜成に぀いおたずめたす。Kerasに぀いおはむンタヌネット䞊で倚くの情報を手に入れられたすが、本蚘事ではKerasによるモデルの䜜成に加えお、パラメヌタ最適化 フレヌムワヌク 「Optuna」を甚いた䞀郚パラメヌタの自動最適化の詊みに぀いおも玹介したす。 はじめに Kerasずは Optunaずは Kerasによるニュヌラルネットワヌクモデルの䜜成の流れ Pythonのバヌゞョンず利甚ラむブラリ デヌタの入手 実行ディレクトリの敎備 デヌタの前凊理 文字列の敎圢 デヌタの読み蟌みず分割 文字列のベクトル化 Kerasによるニュヌラルネットワヌクモデルの定矩 モデル䜜成・蚓緎・評䟡実行甚クラスの定矩 Optunaによる最適なパラメヌタの探玢 最適なパラヌメヌタの探玢ずニュヌラルネットワヌクモデルの䜜成・蚓緎の実斜 䜜成したニュヌラルネットワヌクモデルの利甚 結果ず考察 党䜓スクリプト Kerasずは Kerasは オヌプン゜ヌス の ニュヌラルネットワヌク /深局孊習ラむブラリです。 ニュヌラルネットワヌク モデルを䜜成するためのラむブラリにはKeras以倖にも、TensorFlowやPytorchなどいく぀か皮類がありたすが、Kerasは簡朔な蚘述で ニュヌラルネットワヌク を䜜成できるずいわれおいたす。実際にKerasでは十数行で ニュヌラルネットワヌク モデル呚りの スクリプト を蚘述できたす。 Keras公匏サむト(日本語) keras.io Optunaずは Outunaはハむパヌパラメヌタ自動最適化 フレヌムワヌク です。専門甚語を䜿わずに簡単に説明するず、Optunaは「人が自ら調敎する必芁があった 機械孊習 モデル等のパラメヌタの最適倀を自動的に芋぀けおくれるツヌル」です。 ニュヌラルネットワヌク モデルでは隠れ局のナニット数など䞀郚のパラメヌタの最適化を人が行うこずになりたすが、Optunaを䜿うずそれらのパラメヌタの最適化を自動化できたす。 www.preferred.jp   Kerasによる ニュヌラルネットワヌク モデルの䜜成の流れ 今回は以䞋の流れで ニュヌラルネットワヌク モデルを䜜成したす。      Python のバヌゞョンず利甚ラむブラリ 利甚した Python のバヌゞョンは「 Python 3.9.9 」です。 今回の ニュヌラルネットワヌク モデル䜜成に際し、以䞋の倖郚ラむブラリを利甚しおいたす。 KerasはTensorflowのtensorflow.kerasモゞュヌルを通しお利甚したす。 pandas cleantext scikit-learn tensorflow optuna デヌタの入手 今回は英語のレビュヌ投皿に察し、内容が肯定的か吊定的かを予枬する ニュヌラルネットワヌク モデルの䜜成を詊みたす。そのために必芁なデヌタをKaggleから入手するこずにしたす。 Kaggleに぀いお詳しくは公匏サむトや玹介蚘事を参照しお䞋さい。 www.kaggle.com ai-kenkyujo.com 今回は、こちらのTrip Advisor Hotel Reviewsずいう英語のホテルのレビュヌ投皿のデヌタを䜿いたす。 www.kaggle.com このデヌタは行毎にレビュヌ本文ずレヌティング(肯定的か吊定的かの指暙になりたす)がセットになっおいる圢匏のため、モデルの蚓緎甚ずしお䜿いやすいず思いたす。      *Alam, M. H., Ryu, W.-J., Lee, S., 2016. Joint multi-grain topic sentiment: modeling semantic aspects for online reviews. Information Sciences 339, 206–223. ※ レビュヌ本文を芋おみるず文法的にな英文が結構ありたすが、今回はそのたた䜿うこずにしたす。(公開甚に匿名化凊理をした圱響なのかもしれたせん。) 実行 ディレクト リの敎備 予め以䞋のような構造で実行 ディレクト リを敎備しおおきたす。実行甚のpyファむル、ダりンロヌドしたレビュヌの csv ファむル、Tensorboardに衚瀺するデヌタの保存先ずなるフォルダを配眮したす。     デヌタの前凊理 レビュヌデヌタはそのたた䜿わず、文字列の敎圢やデヌタの分割、文字列のベクトル化ずいった前凊理を行いたす。たずはそのための関数をいく぀か定矩したす。 文字列の敎圢 レビュヌ本文は英語のため、それほど耇雑な凊理は必芁ないず思いたす。今回は、 Python の前凊理ラむブラリのclean-textず組み蟌み関数のみで前凊理を実斜したす。 Clean-text pypi.org ※ むンストヌル時にはハむフンありのものを指定しおください。「cleantext」ずいう別のラむブラリもあるので泚意しおください。    pip install clean-text ※  Python の スクリプト を掲茉する際には、なるべく説明のコメントを入れ、関数には Google スタむルのdocstringラむクな説明を぀けるようにしたす。 def normalize_doc (text, no_digits= False , no_numbers= False , to_ascii= False ): """蚓緎デヌタ正芏化 蚓緎甚デヌタ(テキスト)を正芏化したす。 Args: text (str): 正芏化したいテキスト no_digits (bool, optional): 桁数を維持したたた党おの数字を0に倉換するかどうか(123は000に、5678は0000に倉換されたす) no_numbers (bool, optional): 桁数を残さず数字を党お指定した文字列(今回は0に蚭定しおいたす)に倉換するかどうか(123は0に5678も0に倉換されたす) to_ascii (bool, optional): 非アスキヌ文字をアスキヌ文字に倉換するかどうか (日本語は非アスキヌ文字なため、日本語を含むテキストにはFalseを蚭定) Returns: str: 正芏化枈テキスト """ # テキストの最初ず最埌の䜙分なスペヌスを陀去したす。 text = text.strip() # 正芏化甚ラむブラリを䜿っおデヌタを正芏化したす。ここではunicode errorの陀去ずアルファベットの小文字化のみを行っおいたす。 text = cleantext.clean(text, no_digits=no_digits, to_ascii=to_ascii, no_numbers=no_numbers, replace_with_number= "0" ) return text デヌタの読み蟌みず分割 CSV ファむルを読み蟌み、レヌティングの぀け盎しずデヌタ数の孊習甚ず評䟡甚ぞの分割を行いたす。 レヌティングの぀け盎しでは、今回の予枬を「レビュヌがポゞティブかネガティブか」の2倀予枬(2倀分類)ずするため、レヌティング1ず2を「0」(ネガティブ)、レヌティングずは「1」(ポゞティブ)に぀け盎したす。どちらずも取れそうなレヌティングは陀倖するこずにしたす。 たた、デヌタを孊習甚ずモデルの評䟡甚に分割する凊理も行いたす。このずき、ポゞティブレビュヌずネガティブレビュヌそれぞれで孊習甚ず評䟡甚に分割し、その埌に孊習甚のポゞティブレビュヌずネガティブレビュヌ同士、評䟡甚のポゞティブレビュヌずネガティブレビュヌ同士を結合したす。 (党䜓の8割を孊習甚ずした堎合、すべおのネガティブレビュヌが孊習甚ずなり、評䟡甚にはポゞティブレビュヌしか含たれなくなるこずを防ぐためです。2番目の図で瀺す凊理を行いたす。)      def load_data (path): """蚓緎デヌタ、正解ラベルの加工ず蚓緎甚。評䟡甚ぞの分割 CSVファむルから蚓緎デヌタず正解ラベルを取り出し、正解ラベルの2倀ぞの倉換ず デヌタの孊習甚ず評䟡甚ぞの分割を行いたす。 蚓緎甚デヌタのデヌタフレヌムず評䟡甚デヌタのデヌタフレヌムを返したす。 Args: path (str): レビュヌ本文ずレヌティングのCSVファむルのパス :Returns: pandas.DataFrame: 孊習デヌタのデヌタフレヌム pandas.DataFrame: 評䟡甚ラベルのデヌタフレヌム """ # レビュヌ本文ずレヌティングのCSVファむルをデヌタフレヌム圢匏で読み蟌みたす。 review_df = pd.read_csv(path, header= 0 ) # デヌタフレヌムの列を参照するずきに䟿利なので列ラベルを取埗しおおきたす。 columns = review_df.columns # レビュヌを「ポゞティブ」、「ネガティブ」の2倀で予枬するため、レヌティング1-2は0(ネガティブ)に、4-5は1(ポゞティブ)に倉換したす。 # 今回䞭間の3は無芖したす。(3はポゞティブずもネガティブずもずれる堎合がありそうなため) mapping = { 1 : 0 , 2 : 0 , 3 : 3 , 4 : 1 , 5 : 1 } review_df[columns[ 1 ]] = review_df[columns[ 1 ]].map(mapping) # ネガティブレビュヌのみでフィルタヌをかけたす。 negative_review_df = review_df[review_df[columns[ 1 ]] == 0 ] # ポゞティブレビュヌのみでフィルタヌをかけたす。 positive_review_df = review_df[review_df[columns[ 1 ]] == 1 ] # ネガティブレビュヌ、ポゞティブレビュヌそれぞれを孊習甚ず評䟡甚に分割したす。今回は孊習甚8割、評䟡甚2割に分割したす。 # 分割にはsklearnのtrain_test_splitを利甚したす。 # レビュヌ本文の前凊理を同時に行うためにいったんデヌタをリスト圢匏に倉えおいたす。 xn = [normalize_doc(review_body) for review_body in negative_review_df[columns[ 0 ]]] yn = list (negative_review_df[columns[ 1 ]]) xp = [normalize_doc(review_body) for review_body in positive_review_df[columns[ 0 ]]] yp = list (positive_review_df[columns[ 1 ]]) xn_train, xn_test, yn_train, yn_test = train_test_split( xn, yn, test_size= 0.2 , random_state= 42 , ) xp_train, xp_test, yp_train, yp_test = train_test_split( xp, yp, test_size= 0.2 , random_state= 42 , ) # ネガティブレビュヌずポゞティブレビュヌデヌタを結合し、孊習甚デヌタのデヌタフレヌムず評䟡甚デヌタのデヌタフレヌムを䜜成したす。 x_train = xn_train + xp_train x_test = xn_test + xp_test y_train = yn_train + yp_train y_test = yn_test + yp_test # 孊習甚デヌタのデヌタフレヌム train = list () for x, y in zip (x_train, y_train): train.append([x, y]) train_df = pd.DataFrame(train, columns=[ "Review" , "Rating" ]) # 評䟡甚デヌタのデヌタフレヌム test = list () for x, y in zip (x_test, y_test): test.append([x, y]) test_df = pd.DataFrame(test, columns=[ "Review" , "Rating" ]) # 関数の戻り倀ずしおデヌタフレヌムをセットする際に「.sample(frac =1).reset_index(drop=True)」でデヌタをシャッフルしむンデックスをふり盎したす。 return train_df.sample(frac= 1 ).reset_index(drop= True ), test_df.sample(frac= 1 ).reset_index(drop= True ) 文字列のベクトル化 モデルの蚓緎の際、テキストデヌタをそのたた入力ずするこずができたせん。 ベクトル化ずいうテキストを数倀列に倉換する䜜業が必芁になりたす。そこで今回は「TF-IDF」ずいうテキスト内の単語の重芁性を反映した数倀列によるベクトル化を行っおみたす。 たた、今回は「 ストップワヌド 」ずいう頻床単語のフィルタを䜿わない代わりに、SklearnのTfidfVectorizerのパラメヌタの「max_df」を蚭定し、重芁ではない単語の陀去を詊みたす。 Tf-idfに぀いお atmarkit.itmedia.co.jp Sklearnの公匏ドキュメント scikit-learn.org def get_vectorizer (corpus_x_train, corpus_x_test): """テキストのTF-IDFによるベクトル化 レビュヌ本文デヌタをtfidfによっおベクトル化したす。ベクトラむザヌ(ベクトルぞの倉換噚)はデヌタのうち モデルの蚓緎に䜿うデヌタのみで蚓緎したす。評䟡甚デヌタは孊習デヌタで蚓緎したベクトラむザヌを䜿いベクトル化したす。 Args: corpus_x_train (iterator): デヌタのうち蚓緎甚に分割した郚分 corpus_x_test (iterator): デヌタのうち評䟡甚に分割した郚分 Returns: sklearn.feature_extraction.text.TfidfVectorizer: 蚓緎埌のTF-IDFベクトラむザヌ ndarray: ベクトル化の察象ずなった語圙のリスト (ndarray of str objects) ndarray: ベクトル化した蚓緎甚デヌタ ndarray: ベクトル化した評䟡甚デヌタ ベクトラむザヌ、ベクトル化の察象ずなった語圙のリスト、ベクトル化した蚓緎甚デヌタ、ベクトル化した評䟡甚デヌタ """ # ベクトラむザヌを䜜成したす。max_dfの倀を蚭定するず指定した倀の割合以䞊の文曞に含たれる語圙はベクトル化の察象ずならなくなりたす。 # max_dfの倀を0.3に蚭定しおいたすが、デヌタの実情に合わせお調敎が必芁です vectorizer = TfidfVectorizer(max_df= 0.3 ) # 蚓緎甚デヌタを䜿っおベクトラむザヌを蚓緎し、同時に蚓緎甚デヌタのベクトル化も行いたす。 vec_corpus_x_train = vectorizer.fit_transform(corpus_x_train) # 蚓緎したベクトラむザヌで評䟡甚デヌタのベクトル化を行いたす。 vec_corpus_x_test = vectorizer.transform(corpus_x_test) return vectorizer, vectorizer.get_feature_names_out(), vec_corpus_x_train.toarray(), vec_corpus_x_test.toarray() Kerasによる ニュヌラルネットワヌク モデルの定矩 デヌタの前凊理甚関数の定矩が終わったので、Kerasを䜿い ニュヌラルネットワヌク モデルを定矩しおいきたす。 今回は次のような ニュヌラルネットワヌク モデルを定矩しおいきたす。     ※ 䞭間局が2局ある ニュヌラルネットワヌク モデルは深局孊習モデルずもみなせたすが、本蚘事では「 ニュヌラルネットワヌク モデル」ず呌ぶこずにしたす。 テキスト(今回はレビュヌ本文)のベクトルデヌタを入力ずし、入力局→䞭間局1→䞭間局2→出力局ず凊理を行っおいきたす。 今回はKerasのFunctionalモデルを䜿いこのモデルを定矩したす。Kerasでは、モデルの定矩に「Functional API 」ず「Sequentialモデル」が䜿えたすが、耇数入力、耇数出力をするような耇数なモデルを定矩する際にはFuncitional API を䜿いたす。(今回はベクトル1぀を入力ずするので耇数入力ではありたせんが、将来的な発展の可胜性も考えお、Functional API を遞んでいたす。) KerasはTensorflowのtensorflow.kerasモゞュヌルからむンポヌトしお䜿いたす。 keras.io keras.io Kerasでモデルを定矩する際は、keras.layers.Inputやkeras.layers.Denseを䜿い各局のナニット数や掻性化関数を定矩しおいきたす。 䞊の図では省略しおいたすが、䞭間局1ず䞭間局の間、䞭間局2ず出力局の間にDropoutå±€(keras.layers.Dropout)を远加し 過孊習 察策をしたす。(䞊の図では省略) deepage.net 最埌にkeras.Modelのcompileメ゜ッドを䜿い、モデルの損倱関数や オプティマ むザを指定したす。 def create_model (n_vocab, unit): """Kerasによるニュヌラルネットワヌクの定矩 KerasのFuncitional APIを䜿いニュヌラルネットワヌクモデルを定矩したす。 Args: n_vocab (int): 入力ずしお枡すデヌタの次元数です。入力局のナニット数ずなりたす。(ベクトラむザヌから取埗する語圙のリスト内の芁玠数ずしたす。) unit (int): 䞭間局のナニット数です。任意の数を蚭定できたすが、今回はOptunaによる最適な倀(敎数)を自動で蚭定したす。 Returns: tensorflow.keras.Model: ニュヌラルネットワヌクモデル(オブゞェクト) """ # 入力局を远加したす。ナニット数はvocabず同じです。 input_ = keras.layers.Input(shape=(n_vocab,)) # äž­é–“å±€(党結合局)ずドロップアりト局を远加したす。ナニット数は匕数unitで指定したす。 x = keras.layers.Dense(unit, activation= "relu" )(input_) x = keras.layers.Dropout( 0.8 )(x) # 2局目の䞭間局(党結合局)ずドロップアりト局を远加したす。ナニット数は匕数unitで指定したす。 x = keras.layers.Dense(unit, activation= "relu" )(x) x = keras.layers.Dropout( 0.5 )(x) # 出力局を远加したす。 ゜フトマックス関数を䜿う2倀分類のためナニット数は2です。 output = keras.layers.Dense( 2 , activation= "softmax" )(x) # モデル(オブゞェクト)を䜜成したす。 model = keras.Model(inputs= input , outputs=output) # パラメヌタの曎新や損倱関数、評䟡関数に䜕を䜿うかを蚭定したす。倉曎する必芁はないかず思いたす。 model.compile( optimizer= "adam" , loss= "sparse_categorical_crossentropy" , metrics=[ "accuracy" ] ) # モデルの抂芁を出力したす。 print (model.summary()) return model モデル䜜成・蚓緎・評䟡実行甚クラスの定矩 Kerasによる ニュヌラルネットワヌク モデルの定矩ができたので、次に「モデル(のオブゞェクト)を䜜成し、そのモデルの蚓緎を行うクラス」を䜜成したす。 これたでに䜜成した前凊理関数を䜿い、孊習デヌタを敎え、 ニュヌラルネットワヌク もですの䜜成、蚓緎から評䟡たでを行うクラスずしおみたす。 class NnModel : """ニュヌラルネットワヌク䜜成・蚓緎・評䟡甚クラス ニュヌラルネットワヌクモデルオブゞェクトの䜜成、蚓緎、評䟡を行うためのクラスです。 Attributes: vec_x_train (ndarray): ベクトル化枈の蚓緎甚デヌタ x_test (pandas.Series): ベクトル化前の評䟡甚デヌタ vec_x_test (ndarray): ベクトル化枈の評䟡甚デヌタ y_train (pandas.Series): モデルの蚓緎時に䜿う正解ラベル y_test (pandas.Series): モデルの評䟡時に䜿う正解ラベル model (tensorflow.keras.Model): model_fit実行時に䜜成されるニュヌラルネットワヌクオブゞェクト """ def __init__ (self, path): # CSVファむルから蚓緎デヌタず正解デヌタを取埗したす。 train_df, test_df = load_data(path) columns = train_df.columns x_train = train_df[columns[ 0 ]] self.x_test = test_df[columns[ 0 ]] self.y_train = train_df[columns[ 1 ]] self.y_test = test_df[columns[ 1 ]] # 蚓緎デヌタをベクトル化したす。 self.vectorizer, self.vocab, self.vec_x_train, self.vec_x_test = get_vectorizer(x_train, self.x_test) # 埌で蚓緎埌のモデルを利甚する際に必芁になるので、ベクトラむザヌのオブゞェクトをpickleファむルに保存しおおきたす。 with open ( "my_vectorizer.pickle" , "wb" ) as f: pickle.dump(self.vectorizer, f) def model_fit (self, unit, logdir, validation_split= 0.2 , epochs= 20 , batch_size= 32 ): """ニュヌラルネットワヌクモデル (tensorflow.keras.Model)の䜜成ず甚意した蚓緎デヌタでの蚓緎 ニュヌラルネットワヌクモデルオブゞェクトを䜜成し、甚意した蚓緎デヌタで蚓緎したす。 Optunaずの連携のため、ニュヌラルネットワヌクオブゞェクトはこのメ゜ッドで䜜成したす。 Args: unit (int): 䞭間局のナニット数です。今回はoptunaによっお最適な倀を蚭定したす。 logdir (str): 蚓緎時の孊習ログを保存するフォルダを指定したす。(tensorboardを䜿う堎合にこのフォルダ内のログを参照したす。) validation_split (float): 蚓緎時(keras.Modelのfitメ゜ッド実行時)の各゚ポックで怜蚌甚に䜿う蚓緎デヌタの割合を指定したす。 epochs (int): 蚓緎デヌタを繰り返しお孊習させる回数を指定したす。 batch_size (int): 䜕件の蚓緎デヌタ毎にパラメヌタの曎新を行うかを指定したす。 Returns: float: モデルの評䟡甚デヌタでの損倱倀 """ # ニュヌラルネットワヌクモデル(オブゞェクト)を䜜成したす。 self.model = create_model( len (self.vocab), unit) # 孊習の進行状況の可芖化や粟床が向䞊しなくなった際の孊習の早期終了を行う関数をコヌルバックにたずめたす。 tensorboard = keras.callbacks.TensorBoard(log_dir=logdir) early_stopping = keras.callbacks.EarlyStopping(monitor= 'val_loss' , patience= 3 ) model_name = "my_neural_model.h5" modelCheckpoint = keras.callbacks.ModelCheckpoint( filepath=model_name, monitor= 'val_loss' , verbose= 1 , save_best_only= True , save_weights_only= False , mode= 'min' , period= 1 ) callbacks = [tensorboard, early_stopping, modelCheckpoint] # モデルの蚓緎を実斜したす。 self.model.fit( self.vec_x_train, self.y_train, validation_split=validation_split, epochs=epochs, batch_size=batch_size, callbacks=callbacks # 䞊で定矩したコヌルバック関数のリストを指定したす。 ) # my_neural_model.h5に保存されおいる(各゚ポックのうち最も粟床の良かった)モデルを読み蟌んでテスト甚デヌタで粟床を算出したす。 model = keras.models.load_model(model_name) pred = model.evaluate(self.vec_x_test, self.y_test) # ニュヌラルネットワヌクモデルの隠れ局の最適ナニット数の掚定のため、今回はテストデヌタでの損倱倀を孊習メ゜ッドの戻り倀ずしおおきたす。 return pred[ 0 ] def model_predict (self): """ニュヌラルネットワヌクモデルの性胜評䟡 train_test_splitで分割したデヌタのうち評䟡甚のデヌタを䜿い、 model_fitで蚓緎したモデルの性胜を評䟡したす。 Returns: list: モデルの予枬結果のリスト(予枬ラベルのリスト) """ # (keras.Modelの)predictメ゜ッドに評䟡甚のデヌタを枡したす。 y_pred = self.model.predict(self.vec_x_test) # 予枬結果のうち、「1」(あり)、「」(なし)のうち予枬数倀が高かった方をリストに远加したす。 y_pred = [p.argmax() for p in y_pred] # sklearnのスコア算出甚の各関数に予枬ラベルず正解ラベルを枡しモデルの性胜を評䟡したす。 print ( "result" ,f "accuracy: {accuracy_score(self.y_test, y_pred)}" , f "precision: {precision_score(self.y_test, y_pred)}" , f "recall: {recall_score(self.y_test, y_pred)}" , sep= " \r\n " ) return y_pred Optunaによる最適なパラメヌタの探玢 Kerasを䜿った ニュヌラルネットワヌク モデルの䜜成から評䟡たでを行うクラスが定矩できたので、実行しお結果を埗るこずもできるのですが、今回は䞭間局の最適なナニット数を「Optuna」を䜿っお自動最適化しおみたす。 Optunaを䜿う際には、最適化したいパラメヌタずそのデヌタ型、ある倀が最適かどうかを刀断するための指暙に䜕を䜿うかを指定したす。今回は: 最適化したいパラメヌタずそのデヌタ型: 䞭間局のナニット数 敎数(int)型 最適かどうかの指暙: 指定したパラメヌタでのモデル蚓緎埌の損倱倀 ずいう条件でパラメヌタの自動最適化を実斜したす。 keras.io keras.io def objective (trial): """Optunaでパラメヌタ掚定を行う際の凊理内容 Optunaでパラメヌタ掚定を行うための関数です。 目的のパラメヌタを倉曎した際の粟床の指暙ずなる数倀が戻り倀ずなるようにしおおく必芁がありたす。 (倀が改善すればより良いパラヌメヌタ倀ずみなしたす。) Args: trial: OptunaのStudyオブゞェクトが蚭定したす。 :Returns: float: Optunaがパラメヌタを蚭定した䜜成したモデルの損倱倀(粟床指暙) """ # 今回はニュヌラルネットワヌクモデルの䞭間局のナニット数の自動掚定を詊みたす。 # 指定した数倀(今回は2-30)の間で最も粟床が高くなる数倀を最適なナニット数ずみなしたす。 # 掚定する数倀は埌で参照するために"unit"ず指定しおおきたす。 unit = trial.suggest_int( "unit" , 2 , 30 ) loss = nn_model.model_fit(unit, r"logs" , epochs= 100 ) return loss 最適なパラヌメヌタの探玢ず ニュヌラルネットワヌク モデルの䜜成・蚓緎の実斜 これたで定矩しおきた関数ずクラス、Optunaを䜿い、最適なナニット数の探玢ず最適なナニット数を蚭定したモデルの䜜成を行いたす。 凊理の流れは次のようになりたす。 ニュヌラルネットワヌク モデル䜜成甚オブゞェクトの䜜成(å­Šç¿’/評䟡甚デヌタの前凊理) OptunaのStudyオブゞェクトを䜜成、最適なナニット数を探玢 探玢完了埌にStudyオブゞェクトからナニット数の数倀を取埗 ニュヌラルネットワヌク モデル䜜成甚オブゞェクト(keras.Model)のモデル䜜成/蚓緎メ゜ッド(fit)に最適なナニット数を枡しおモデルを䜜成/蚓緎 評䟡甚デヌタでモデルを評䟡 # ニュヌラルネットワヌクモデル䜜成甚オブゞェクトを䜜成したす。 target_data = r"tripadvisor_hotel_reviews.csv" nn_model = NnModel(target_data) def main (): """実行甚関数 これたでに䜜成しおきた関数ずクラスを䜿い最適な䞭間局ナニット数の掚定から モデルの定矩、蚓緎、評䟡たでを実行したす。 Returns: None """ # oputunaで最適なナニット数を芋぀けたす。最埌にBest unitずしお出力されたす。 # directionは損倱関数の堎合はminimizeを指定したす。(正解率を粟床指暙ずする堎合にはmaxizeを指定したす。) study = optuna.create_study(direction= "minimize" ) # 最適なナニット数を芋぀けるために䜕床詊行するかを指定し、自動掚定を実行したす。 study.optimize(objective, n_trials= 10 ) # 最適なナニット数はこの倉数から best_params["unit"] ずするず取埗できたす。ディレクトリ型の参照ず同じです。 best_params = study.best_params print (f "Best unit: {best_params}" ) # 最適な数倀を䞭間局のナニット数に指定し、モデルの定矩ず蚓緎、評䟡を行いたす。 nn_model = NnModel(target_data) nn_model.model_fit(best_params[ "unit" ], r"logs" , epochs= 100 ) nn_model.model_predict() if __name__ == "__main__" : main() 今回䜜成したモデルの評䟡結果は以䞋のようになりたした。      Accuracy: 0.9555      Precision: 0.9609      Recall: 0.9861 かなり良い数倀ですが、Tensorboardでモデル損倱のグラフを確認しおみるず、2゚ポック以降枛少が芋られたせん。察策はしおいたしたが 過孊習 をしおしたったようです。 (濃い青の線が孊習デヌタでの損倱倀、氎色の線が評䟡甚デヌタでの損倱倀)      (Tensorboardでは孊習デヌタでモデルを繰り返し蚓緎する䞭で、どのように性胜が倉化しおいったかを確認するこずができたす。) (model_fitメ゜ッドのtensorboard = keras.callbacks.TensorBoard(log_dir=logdir)の行でtensorboardの蚭定を行っおいたす。) www.tensorflow.org deepage.net 䜜成した ニュヌラルネットワヌク モデルの利甚 最埌に䜜成したモデルを䜿っお、未知のデヌタでの予枬を行うための関数を䜜成しおみたす。 モデル䜜成時に䜿った ベクトラ むザヌず保存した ニュヌラルネットワヌク モデルを読み蟌み、それらに予枬を行いたいデヌタ(テキスト)を枡しお予枬結果の確率を出力したす。 保存したモデルは、tensorflow.keras.models.load_modelで読み蟌みたす。 def model_load_predict (x, model_h5, vec_pickle): """ニュヌラルネットワヌクモデルを利甚した未知デヌタに察する予枬甚関数 䜜成・保存したニュヌラルネットワヌクモデルを利甚しお、未知デヌタの予枬を行いたす。 Args: x (str): テキストデヌタ(レビュヌ本文ず同じ圢匏) model_h5 (str): 䜜成したニュヌラルネットワヌクモデルのh5ファむルのパス vec_pickle (str): 保存したベクトラむザヌのpickleファむルのパス Returns: int: 予枬ラベルの敎数倀(入力したテキストをネガティブず予枬した堎合は0,、ポゞティブず予枬した堎合は1) """ # モデルずベクトラむザヌを読み蟌みたす。 model = keras.models.load_model(model_h5) with open (vec_pickle, 'rb' ) as f: vectorizer = pickle.load(f) # 入力デヌタの正芏化ずベクトル化を行いたす。 x = normalize_doc(x) vec_x = vectorizer.transform([x]).toarray() # 入力デヌタに察しお予枬を行い、結果を出力したす。 pred = model.predict(vec_x) print ( "== Result ==" ) print ( "Positive" ) if pred[ 0 ][ 1 ] > pred[ 0 ][ 0 ] else print ( "Negative" ) print (f "Positive: {pred[0][1]}, Negative: {pred[0][0]}" ) return pred.argmax() if __name__ == "__main__" : x = input ( ">>>" ) model_h5 = "my_neural_model.h5" vec_pickle = "my_vectorizer.pickle" res = model_load_predict(x, model_h5, vec_pickle) print ( "予枬ラベル: " , res) 関数を実行し「>>>」ず衚瀺されたら、ネガティブかポゞティブかを予枬したいテキストを入力したす。テキスト入力埌に「enter」を抌すず予枬結果が出力されたす。(予枬結果の前に譊告が衚瀺されるこずがありたすが、今回は無芖したす。)           結果ず考察 KerasずOptunaを䜿い、実際に予枬を行うこずができる ニュヌラルネットワヌク モデルを䜜成するこずができたした。 このモデルは評䟡結果の数倀を芋るず悪くないように芋えるのですが、未知のレビュヌデヌタに察する予枬性胜が高いずは蚀えたせん。䞀目でポゞティブずわかる内容のレビュヌに察しお、99ネガティブずいう予枬をするこずもありたした。 今回の反省点ずしおは、 デヌタの質が良くなかった。   → 今回は文法的に怪しい英文もそのたた䜿いたした。これが良くなかったのかもしれたせん。   → 非垞に長いレビュヌ本文を持぀レコヌドが含たれおいたしたが、この手のレコヌドは「いい点もあった。が、しかし 」ずいう流れでポゞティブな偎面ずネガティブな偎面を持っおいる可胜性があり、どちらかに分類するには容易ではないのかもしれたせん。 デヌタが足りなかった。   → 2䞇レコヌドでは足りなかったのかもしれたせん。 ベクトル化の方法が良くなかった。   → TF-IDFよりも単語の意味を反映するずされる分散衚珟の方がよかったのかもしれたせん。 別のハむパヌパラメヌタもOptunaで最適化すべきだった。   → ナニット数以倖にも孊習率やバッチサむズも最適な倀をOptunaで蚭定するずよかったのかもしれたせん。 モデルの アヌキテクチャ が適切でなかった。   → 今回のような ニュヌラルネットワヌク モデルよりもリカレント ニュヌラルネットワヌク モデルの方がテキスト分類には適しおいるのかも知れたせん。 ずいったこずが考えられたす。このモデルを改善する際や新たなモデルを䜜成する際には、䞊蚘の反省点を螏たえる必芁があるず感じおいたす。 特にデヌタに関しおは、倧量のデヌタが必芁になるため、ある詊行でうたくいかなかった際に、簡単に代替のデヌタを甚意できるずは限りたせん。 自前でデヌタを甚意する際には、最初から質の高いデヌタが揃うようにデヌタ収集䜜業を行う必芁があるず思いたす。 党䜓 スクリプト 最埌に、今回の ニュヌラルネットワヌク モデル䜜成の詊みに関わる スクリプト 党䜓をたずめおおきたす。 テキストデヌタの分類であれば、少しの線集でいろいろなデヌタを扱えるず思いたす。ぜひ、ご自身のデヌタで予枬モデルを䜜成しおみおください。 # coding: utf-8 import pandas as pd import pickle import cleantext import optuna from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, precision_score, recall_score from tensorflow import keras def normalize_doc (text, no_digits= False , no_numbers= False , to_ascii= False ): text = text.strip() text = cleantext.clean(text, no_digits=no_digits, to_ascii=to_ascii, no_numbers=no_numbers, replace_with_number= "0" ) return text def load_data (path): review_df = pd.read_csv(path, header= 0 ) columns = review_df.columns mapping = { 1 : 0 , 2 : 0 , 3 : 3 , 4 : 1 , 5 : 1 } review_df[columns[ 1 ]] = review_df[columns[ 1 ]].map(mapping) negative_review_df = review_df[review_df[columns[ 1 ]] == 0 ] positive_review_df = review_df[review_df[columns[ 1 ]] == 1 ] xn = [normalize_doc(review_body) for review_body in negative_review_df[columns[ 0 ]]] yn = list (negative_review_df[columns[ 1 ]]) xp = [normalize_doc(review_body) for review_body in positive_review_df[columns[ 0 ]]] yp = list (positive_review_df[columns[ 1 ]]) xn_train, xn_test, yn_train, yn_test = train_test_split( xn, yn, test_size= 0.2 , random_state= 42 , ) xp_train, xp_test, yp_train, yp_test = train_test_split( xp, yp, test_size= 0.2 , random_state= 42 , ) x_train = xn_train + xp_train x_test = xn_test + xp_test y_train = yn_train + yp_train y_test = yn_test + yp_test train = list () for x, y in zip (x_train, y_train): train.append([x, y]) train_df = pd.DataFrame(train, columns=[ "Review" , "Rating" ]) test = list () for x, y in zip (x_test, y_test): test.append([x, y]) test_df = pd.DataFrame(test, columns=[ "Review" , "Rating" ]) return train_df.sample(frac= 1 ).reset_index(drop= True ), test_df.sample(frac= 1 ).reset_index(drop= True ) def get_vectorizer (corpus_x_train, corpus_x_test): vectorizer = TfidfVectorizer(max_df= 0.3 ) vec_corpus_x_train = vectorizer.fit_transform(corpus_x_train) vec_corpus_x_test = vectorizer.transform(corpus_x_test) return vectorizer, vectorizer.get_feature_names_out(), vec_corpus_x_train.toarray(), vec_corpus_x_test.toarray() def create_model (n_vocab, unit): input_ = keras.layers.Input(shape=(n_vocab,)) x = keras.layers.Dense(unit, activation= "relu" )(input_) x = keras.layers.Dropout( 0.8 )(x) x = keras.layers.Dense(unit, activation= "relu" )(x) x = keras.layers.Dropout( 0.5 )(x) output = keras.layers.Dense( 2 , activation= "softmax" )(x) model = keras.Model(inputs= input , outputs=output) model.compile( optimizer= "adam" , loss= "sparse_categorical_crossentropy" , metrics=[ "accuracy" ] ) print (model.summary()) return model class NnModel : def __init__ (self, path): train_df, test_df = load_data(path) columns = train_df.columns x_train = train_df[columns[ 0 ]] self.x_test = test_df[columns[ 0 ]] self.y_train = train_df[columns[ 1 ]] self.y_test = test_df[columns[ 1 ]] self.vectorizer, self.vocab, self.vec_x_train, self.vec_x_test = get_vectorizer(x_train, self.x_test) with open ( "my_vectorizer.pickle" , "wb" ) as f: pickle.dump(self.vectorizer, f) def model_fit (self, unit, logdir, validation_split= 0.2 , epochs= 20 , batch_size= 32 ): self.model = create_model( len (self.vocab), unit) tensorboard = keras.callbacks.TensorBoard(log_dir=logdir) early_stopping = keras.callbacks.EarlyStopping(monitor= 'val_loss' , patience= 3 ) model_name = "my_neural_model.h5" modelCheckpoint = keras.callbacks.ModelCheckpoint( filepath=model_name, monitor= 'val_loss' , verbose= 1 , save_best_only= True , save_weights_only= False , mode= 'min' , period= 1 ) callbacks = [tensorboard, early_stopping, modelCheckpoint] self.model.fit( self.vec_x_train, self.y_train, validation_split=validation_split, epochs=epochs, batch_size=batch_size, callbacks=callbacks ) model = keras.models.load_model(model_name) pred = model.evaluate(self.vec_x_test, self.y_test) return pred[ 0 ] def model_predict (self): y_pred = self.model.predict(self.vec_x_test) y_pred = [p.argmax() for p in y_pred] print ( "result" , f "accuracy: {accuracy_score(self.y_test, y_pred)}" , f "precision: {precision_score(self.y_test, y_pred)}" , f "recall: {recall_score(self.y_test, y_pred)}" , sep= " \r\n " ) def objective (trial): unit = trial.suggest_int( "unit" , 2 , 30 ) loss = nn_model.model_fit(unit, r"logs" , epochs= 100 ) return loss target_data = r"tripadvisor_hotel_reviews.csv" nn_model = NnModel(target_data) def main (): study = optuna.create_study(direction= "minimize" ) study.optimize(objective, n_trials= 10 ) best_params = study.best_params print (f "Best unit: {best_params}" ) nn_model = NnModel(target_data) nn_model.model_fit(best_params[ "unit" ], r"logs" , epochs= 100 ) nn_model.model_predict() def model_load_predict (x, model_h5, vec_pickle): model = keras.models.load_model(model_h5) with open (vec_pickle, 'rb' ) as f: vectorizer = pickle.load(f) x = normalize_doc(x) vec_x = vectorizer.transform([x]).toarray() pred = model.predict(vec_x) print ( "== Result ==" ) print ( "Positive" ) if pred[ 0 ][ 1 ] > pred[ 0 ][ 0 ] else print ( "Negative" ) print (f "Positive: {pred[0][1]}, Negative: {pred[0][0]}" ) return pred.argmax() if __name__ == "__main__" : main() x = input ( ">>>" ) model_h5 = "my_neural_model.h5" vec_pickle = "my_vectorizer.pickle" res = model_load_predict(x, model_h5, vec_pickle) print (res) ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
【目次】 PdM ずは PMプロゞェクトマネヌゞャヌずの違い PdM/PMの圹割衚 PdM に必芁なスキル おすすめの曞籍/勉匷䌚 ラクスのPdMずしお掻躍しおみたせんか 終わりに 技術広報の yayawowo です。 昚今、PdMプロダクトマネヌゞャヌずいう蚀葉を耳にするこずが増えたのではないでしょうか しかしながら  「実際䜕をしおいる人かわからない」 「PdMを目指しおいるけど、必芁なスキルっお 」 ず䞍明点もあるず思いたす。 本蚘事では、PdMプロダクトマネヌゞャヌの基本や必芁なスキル等を玹介させおいただきたす。 ◆ 関連ブログも合わせおご確認ください ・ プロゞェクトマネゞメント ずは 【たずめ】 ・ PMBOK ずは【たずめ】 ・ 芁件定矩 ずは【たずめ】 ・ プロゞェクトマネゞメントTips 20遞 珟堎から語るプロマネの極意 PdM ずは PdMずは、プロダクトマネヌゞャヌのこずを指したす。 経営方針や䌁業戊略、ビゞネスサむド偎の販売蚈画に基づく顧客芁求の分析、芁求分析/定矩を行い、「プロダクト補品・商品・サヌビス」を成功に導く責任者をPdMず呌びたす。 たたプロダクトずは、䞀般的にお客様ぞ販売する補品のこずを蚀いたすが、゜フトりェア・デヌタ等も含たれたす。 元々、補造業で䜿われおいた蚀葉でしたが、昚今はIT/Web業界にたで掟生し、泚目を集めおいたす。 圓瀟PdMプロダクトマネヌゞャヌは、補品䌁画を行う「補品力䌚議」から参加したす。 「補品力䌚議」では、ビゞネスサむドの郚長やカスタマヌサクセスず顔を合わせるため、開発ロヌドマップにPdMプロダクトマネヌゞャヌずしおの声を反映させるこずができたす   たた、PdMプロダクトマネヌゞャヌの類䌌職皮ずしお、PMプロゞェクトマネヌゞャヌがありたす。 以䞋にお、職皮の違いを解説したす。 PMプロゞェクトマネヌゞャヌずの違い PMプロゞェクトマネゞャヌずは、期間が定められたプロゞェクトの達成/成功に向けお進捗、品質、コストを管理しコン トロヌル する人のこずを指したす。 担圓プロゞェクトに察し、責任をもっお管理するこずが求められる職皮です。 プロゞェクトマネゞメントを解説しおいる蚘事も是非ご参考ください。 tech-blog.rakus.co.jp PdM/PMの圹割衚 職皮 圹割 PdM 経営方針や䌁業戊略、ビゞネスサむド偎の販売蚈画に基づく顧客芁求の分析、芁求分析/定矩を行い、「プロダクト補品・商品・サヌビス」を成功に導く責任を担う PM 期間が定められたプロゞェクトの達成/成功に向けお進捗、品質、コストの管理責任を担う PdM、PMずの圹割が異なるこずをご理解いただけたでしょうか PdM に必芁なスキル ◆ マネゞメント面 ・ コミュニケヌション力 ・ 進捗管理 胜力 ・ 課題解決力 プロダクトマネヌゞャヌずいう名前の通り、マネゞメント面でのスキルは重芁です。 䞊蚘3点は、特に必芁ずなるスキルセットずなりたす。 ◆ ビゞネス面 ・ マヌケティング 力 ・ 業界知識 垂堎調査を行い、分析するこずで垂堎ニヌズを把握するこずが必芁です。 プロダクトを開発にするにしおも、垂堎のニヌズに合っおいないものを開発するのは䌚瀟ずしおもメリットがありたせん。 マヌケティング 力ず業界知識は、PdMプロダクトマネヌゞャヌにずっお倧切なスキルず蚀えるでしょう。 ◆ テク ノロ ゞヌ 面 ・ UI/UXデザむン ・ 開発スキル お客様にシステムを長く䜿っおもらうには、䜿いやすいデザむン、構成ずなっおいるのが倧切です。 お客様に遞ばれるプロダクトにするためには、UI/UXのスキルを深めおおくこずが倧切ずなりたす。 たた、デザむン性だけでなくプロダクト蚭蚈も同様のこずが蚀えたすので、ある皋床の開発スキルがあるこずは奜たしいず思いたす。 おすすめの曞籍/勉匷䌚 おすすめの曞籍ず勉匷䌚をご玹介いたしたす ◆ 曞籍 PdMプロダクトマネヌゞャヌにおすすめの曞籍を䞊べおみたした。 孊習の䞀助ずなれば幞いです。 『 プロダクトマネゞメント のすべお 事業戊略・IT開発・UXデザむン・ マヌケティング からチヌム・組織運営たで』 タむトルの通り、たさに プロダクトマネゞメント の決定版ずいえる曞籍です。 180点超の図版で分かりやすく解析しおいたす。 たた、 ケヌススタディ も぀いおいるので、実践的に孊ぶこずができたす。 『INSPIRED 熱狂させる補品を生み出す プロダクトマネゞメント 』 シリコンバレヌ で実斜しおいる プロダクトマネゞメント の手法がたずめられおいる曞籍です。 䟋えば、 Google 、 Apple 、 Facebook 、 Netflix 、Tesla、 Amazon 等の手法を孊ぶこずが出来たす。 『 プロダクトマネゞメント ―ビルドトラップを避け顧客に䟡倀を届ける』 プロダクトマネゞメント で必芁な情報が䞀通り曞かれおいる䞀冊です。 マネゞメント手法においお必芁な戊略や、組織、プロセスに぀いおを論じおいたす。 ◆ 勉匷䌚 圓瀟䞻催の技術むベントに「PdM TIps LT䌚」がございたす。 rakus.connpass.com 2021幎3月に開催した際は、以䞋発衚テヌマがありたした。 【発衚テヌマ】 ・ アラフィフの開発者が プロダクトマネゞメント をはじめおみた ・ ゞョブ理論ずプロダクト開発 ・ oVice着想から初有料ナヌザヌを獲埗するたでのPMビハむンドストヌリヌ ・ PMが「開発を巻き蟌んだ斜策盞談䌚」で工倫したポむント ・ 私たち“プロダクト䞻導組織”になれおるかなを問う自問自答Tips ・ LabTech䌁業の初代PMになっおやっおきたこずずこれから ・ PdM忙しい問題どうしたす -80点以䞊のプロダクトを目指したら緩和されおきた話- ・ PjM→PdMになった1幎目の倱敗ずTips vol.2も今幎の倏ごろに開催を予定しおおりたす。 ご興味ありたしたら connpass 又は TECH PLAY を定期的にご確認いただけたすず幞いです ラク スのPdMずしお掻躍しおみたせんか 圓瀟 ラク スでは、プロダクトマネヌゞャヌを積極的に募集しおおりたす PdMプロダクトマネヌゞャヌ組織は2021幎8月からスタヌトし、サヌビス党䜓の芖点を持っお働ける環境が備わっおおりたす。 ビゞネスサむドを通じおお客様の課題把握、プロダクトの開発郚隊ぞ抜けもれなく効率的に芁求を萜ずし蟌み、開発偎ぞ連携するために圓瀟ではPdMずいうポゞションを眮いおおりたす。 そのため、圓瀟PdMは以䞋スキルを重芁芖しおおりたす。 Webサヌビス で開発知識 RFP 、芁求仕様策定の実務経隓 ステヌクホルダヌ ずの折衝・調敎経隓 そんな ラク スのPdM特城は以䞋の通りです ラク スのPdM 開発スタむル ベスト・オブ・ブリヌド 異なるフェヌズのマルチプロダクト 組織 プロダクト単䜍でコミット 案件 顧客課題・案件単䜍のコミット 圓瀟PdMプロダクトマネヌゞャヌの面癜さは、挑戊の裁量ず芏暡です。 圓瀟最倧のプロダクトに぀いおサヌビス党䜓の芖点を持っお動けるこず 新しいチヌムで、PdMの圹割そのものを立ち䞊げおいけるこず 䞊蚘の内容にピンっずきた方は、以䞋の求人内容を是非ご確認ください career-recruit.rakus.co.jp 「たずは、䌚瀟説明を聞いおみたい」ずいうのも倧歓迎です。 以䞋フォヌムより申し蟌みをお願いいたしたす rakus.hubspotpagebuilder.com 終わりに PdMプロダクトマネヌゞャヌのたずめ蚘事はいかがでしたでしょうか 幎々、瀟䌚党䜓ずしおPdMポゞションは重芁ずなっおきおおりたす。 今埌PdMを目指す方にずっお、本蚘事の内容が少しでもお圹に立おれば幞いです もし圓瀟PdMに少しでもご興味をお持ちになりたしたら、定期的に行っおいるむベントもございたす。 是非ご参加ください ◆ むベント情報 < connpass > rakus.connpass.com < TECH PLAY > techplay.jp PdM Tips LT䌚 - vol.2の開催が決定 ご興味ありたしたら以䞋より、ご登壇/ご芖聎の申蟌をお願いいたしたす techplay.jp rakus.connpass.com お気軜にどうぞ。 最埌たでお読みいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
こんにちは、匊瀟サヌビスのむンフラを運甚しおいる id:keijiu (ijikeman)です。 今回は、「Knative on minikubeでServing & Eventing Helloworldを動かすたで(構築線)」を蚘茉したす。 [察象読者] Knative Eventing環境を自分で䜜っおみたい人 Knative EventingでサンプルコヌドHelloworldを動かしたい人 Knative Eventingの構成を理解したい人 [蚘事を読んでわかるこず] knative Cli [kn] を䜿っおminikube䞊でKnative Eventingを構築 [構築環境情報] CPU 4 Memory 4GB OS Alma Linux 8.5 minikube version 1.23.4 minikube Driver docker Knative v1.4.0 目次 目次 1. docker-ceのセットアップ docker-ceリポゞトリのセットアップ docker-ceのむンストヌルず起動 docker-ceの起動を確認 2. minikube CLIのセットアップ minikube CLIコマンドのセットアップ minikubeの動䜜確認 minikube甚アカりントを甚意する k8sナヌザに倉曎し、minikubeクラスタを構築する 3. Knativeのセットアップ kubectlコマンドの蚭眮 knative Cli(kn) + Knative quickstart pluginによる構築 knativeのバヌゞョン指定 kn(Knative cli)の蚭眮 Knative Quickstart Pluginの蚭眮 Knative(Serving + Eventing)のセットアップ Knative環境の動䜜状況を確認する 1. docker-ceのセットアップ minikubeを動䜜させる為にはいく぀かのDriverをあらかじめセットアップしおおく必芁がありたす。 参考: Drivers | minikube から今回はdocker-ceを遞択したす。 Docker-CEのセットアップは以䞋の情報を元にセットアップを行いたす。 Docker CE の入手(CentOS 向け) — Docker-docs-ja 20.10 ドキュメント docker-ce リポゞトリ のセットアップ # sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 # sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo docker-ceのむンストヌルず起動 # sudo yum install -y docker-ce # sudo systemctl enable docker # sudo systemctl start docker docker-ceの起動を確認 # sudo systemctl status docker --- ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-05-25 23:56:00 EDT; 2s ago Docs: https://docs.docker.com Main PID: 26493 (dockerd) Tasks: 9 Memory: 35.2M CGroup: /system.slice/docker.service └─26493 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --- 2. minikube CLI のセットアップ 参考: minikube start | minikube 今回は RPM を䜿っおセットアップしたす。 ※ご自身の環境に合わせお遞択肢を倉曎しおください。 minikube CLI コマンドのセットアップ # sudo curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm # sudo rpm -Uvh minikube-latest.x86_64.rpm minikubeの動䜜確認 以䞋の様にroot暩限のアカりントではminikubeは起動できたせんので専甚アカりントを甚意したす。 確認の為にminikube Driverにdockerを指定しおminikube clusterを構築したす。 # sudo minikube start --driver=docexitker --- * Rocky 8.5 (amd64) 䞊の minikube v1.25.2 * ナヌザヌの蚭定に基づいお docker ドラむバヌを䜿甚したす * 「docker」ドラむバヌは root 暩限で䜿甚すべきではありたせん。 * If you are running minikube within a VM, consider using --driver=none: * https://minikube.sigs.k8s.io/docs/reference/drivers/none/ X DRV_AS_ROOT が原因で終了したす: 「docker」ドラむバヌは root 暩限で䜿甚すべきではありたせん。 --- minikube甚アカりントを甚意する minikube構築甚に k8s グルヌプずナヌザを䜜成し、dockerグルヌプに付属させたす。 # groupadd k8s # useradd k8s -g k8s -s /bin/bash -d /home/k8s # sudo usermod -aG docker k8s && newgrp docker dockerグルヌプに付属しおいるこずを確認 # egrep docker /etc/group --- docker:x:987:k8s --- k8s ナヌザに倉曎し、minikube クラスタ を構築する # su - k8s -c 'minikube start --driver=docker' --- * Rocky 8.5 (amd64) 䞊の minikube v1.25.2 * 既存のプロファむルを元に、docker ドラむバヌを䜿甚したす * minikube クラスタヌ䞭のコントロヌルプレヌンの minikube ノヌドを起動しおいたす * ベヌスむメヌゞを取埗しおいたす... * docker 「 minikube 」 container がありたせん。再生成したす。 * docker container (CPUs=2, Memory=2200MB) を䜜成しおいたす... * Docker 20.10.12 で Kubernetes v1.23.3 を準備しおいたす... - kubelet.housekeeping-interval=5m - 蚌明曞ず鍵を䜜成しおいたす... - コントロヌルプレヌンを起動しおいたす... - RBAC のルヌルを蚭定䞭です... * Kubernetes コンポヌネントを怜蚌しおいたす... - gcr.io/k8s-minikube/storage-provisioner:v5 むメヌゞを䜿甚しおいたす * 有効なアドオン: storage-provisioner, default-storageclass * kubectl が芋぀かりたせん。kubectl が必芁な堎合、'minikube kubectl -- get pods -A' を詊しおください * 完了したした kubectl が「"minikube"」クラスタず「"default"」ネヌムスペヌスを䜿甚するよう構成されたした --- minikube clusterの䜜成が可胜であるこずが確認できたしたので、䜜成したminikube clusterを削陀しおおきたす # su - k8s -c 'minikube delete' --- * docker の「minikube」を削陀しおいたす... * コンテナヌ「minikube」を削陀しおいたす... * /home/k8s/.minikube/machines/minikube を削陀しおいたす... * クラスタヌ「minikube」の党おのトレヌスを削陀したした。 --- 3. Knativeのセットアップ ここたでこればKnative環境を構築するのは簡単です。 Knative環境の構築方法は以䞋2皮類ありたす。 knative Cli (kn) + Knative quickstart plugin こちらはKnative ServingずKnative Eventingの䞡方をセットアップしおくれたす。 動䜜が保蚌された状態でセットアップできるこずから、環境構築に手間をかけたくない。ずりあえずKnative觊っおみたいずいった人に向いおいたす。 kubectl + YAML こちらはKnativeのInstallペヌゞに沿っおKnativeのBrokerやTriggerなど各 コンポヌネント をセットアップしおいきたす。 Knative Serving環境だけ䜜りたい人や、BrokerやTrigger等の コンポヌネント においお耇数皮の゜リュヌションの遞択が可胜ですので、䞊蚘基本セットアップ以倖の環境で動かしたい人に向いおいたす。 kubectlコマンドの蚭眮 どちらの構築方法を遞択しおもkubectlコマンドの蚭眮が必芁ずなりたすので、実斜したす。 # sudo curl -L -o /usr/local/bin/kubectl "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" # sudo chmod +x /usr/local/bin/kubectl knative Cli (kn) + Knative quickstart pluginによる構築 公匏サむトに曞かれおいる方法構築しおいきたす。 Install Knative using quickstart - Knative knativeのバヌゞョン指定 Knativeのバヌゞョンを指定したす。 KNATIVE_VERSION='1.4.0' kn(Knative cli )の蚭眮 䞊蚘指定したバヌゞョンにおknコマンドを蚭眮したす。 # sudo curl -LO https://github.com/knative/client/releases/download/knative-v${KNATIVE_VERSION}/kn-linux-amd64 # sudo mv kn-linux-amd64 /usr/local/bin/kn # sudo chmod +x /usr/local/bin/kn Knative Quickstart Pluginの蚭眮 次にquickstart plugin甚コマンドを蚭眮したす。 # sudo curl -LO https://github.com/knative-sandbox/kn-plugin-quickstart/releases/download/knative-v${KNATIVE_VERSION}/kn-quickstart-linux-amd64 # sudo mv kn-quickstart-linux-amd64 /usr/local/bin/kn-quickstart # sudo chmod +x /usr/local/bin/kn-quickstart Knative(Serving + Eventing)のセットアップ 䞀旊 k8s ナヌザに切り替えたす。 # su - k8s いよいよKnativeのセットアップを行いたす。 䞋蚘ログより minikube clusterの構築 kubectlコマンドの参照先をknative クラスタ を参照させる Knative Servingのセットアップ Kourier Netowrk Layerのセットアップ Knative Eventingのセットアップ をそれぞれ実斜しおいたす。 k8s$ kn quickstart minikube --- Running Knative Quickstart using Minikube Minikube version is: v1.25.2 ☞ Creating Minikube cluster... Using the standard minikube driver for your system If you wish to use a different driver, please configure minikube using minikube config set driver <your-driver> * Rocky 8.5 (amd64) 䞊の [knative] minikube v1.25.2 ! Specified Kubernetes version 1.23.4 is newer than the newest supported version: v1.23.4-rc.0 * docker ドラむバヌが自動的に遞択されたした ! あなたの cgroup ではメモリヌの蚭定ができたせん。 - 远加情報: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities X 芁求された 3072MiB のメモリヌ割圓は、システムのオヌバヌヘッド (合蚈システムメモリヌ: 3684MiB) に十分な空きを残したせん。安定性の問題に盎面するかも知れたせん。 * 提案: Start minikube with less memory allocated: 'minikube start --memory=3072mb' * knative クラスタヌ䞭のコントロヌルプレヌンの knative ノヌドを起動しおいたす * ベヌスむメヌゞを取埗しおいたす... * Kubernetes v1.23.4 のダりンロヌドの準備をしおいたす > preloaded-images-k8s-v17-v1...: 505.67 MiB / 505.67 MiB 100.00% 35.55 Mi * docker container (CPUs=3, Memory=3072MB) を䜜成しおいたす... * Docker 20.10.12 で Kubernetes v1.23.4 を準備しおいたす... - kubelet.housekeeping-interval=5m - 蚌明曞ず鍵を䜜成しおいたす... - コントロヌルプレヌンを起動しおいたす... - RBAC のルヌルを蚭定䞭です... * Kubernetes コンポヌネントを怜蚌しおいたす... - gcr.io/k8s-minikube/storage-provisioner:v5 むメヌゞを䜿甚しおいたす * 有効なアドオン: default-storageclass, storage-provisioner * 完了したした kubectl が「"knative"」クラスタず「"default"」ネヌムスペヌスを䜿甚するよう構成されたした 🍿 Installing Knative Serving v1.4.0 ... CRDs installed... Core installed... Finished installing Knative Serving 🕞 Installing Kourier networking layer v1.4.0 ... Kourier installed... Ingress patched... Finished installing Kourier Networking layer 🕞 Configuring Kourier for Minikube... Domain DNS set up... Minikube tunnel... Finished configuring Kourier 🔥 Installing Knative Eventing v1.4.0 ... CRDs installed... Core installed... In-memory channel installed... Mt-channel broker installed... Example broker installed... Finished installing Knative Eventing 🚀 Knative install took: 3m25s 🎉 Now have some fun with Serverless and Event Driven Apps! --- Knative環境の動䜜状況を確認する たずは、namespace情報を確認したす knative-eventing, knative-serving, kourier-systemができおいるこずが確認できたす。 ※kube-node-lease, kube-public, kube-systemはminikubeのnamespaceです。 k8s$ kubectl get namespaces NAME STATUS AGE default Active 9m26s knative-eventing Active 7m27s knative-serving Active 8m26s kourier-system Active 8m1s kube-node-lease Active 9m28s kube-public Active 9m28s kube-system Active 9m28s 次に各deploymentの状況を確認したす。党おREADY 1/1ずなっおいるか確認したす。 ※pingsourceは0/0で問題ありたせん。 knative-eventingの コンポヌネント です。 ChannelはIn Memory Channel(imc-*)が遞択されおいたす。 BrokerはMT-Channel-based(mt-broker-*)が遞択されおいたす。 $ kubectl get deployment --namespace knative-eventing --- NAME READY UP-TO-DATE AVAILABLE AGE eventing-controller 1/1 1 1 13m eventing-webhook 1/1 1 1 13m imc-controller 1/1 1 1 12m imc-dispatcher 1/1 1 1 12m mt-broker-controller 1/1 1 1 12m mt-broker-filter 1/1 1 1 12m mt-broker-ingress 1/1 1 1 12m pingsource-mt-adapter 0/0 0 0 13m --- knative-servingの コンポヌネント です。 networkにkourier network layerが遞択されおいたす。 $ kubectl get deployment --namespace knative-serving --- NAME READY UP-TO-DATE AVAILABLE AGE activator 1/1 1 1 16m autoscaler 1/1 1 1 16m controller 1/1 1 1 16m domain-mapping 1/1 1 1 16m domainmapping-webhook 1/1 1 1 16m net-kourier-controller 1/1 1 1 16m webhook 1/1 1 1 16m --- $ kubectl get deployment --namespace kourier-system --- NAME READY UP-TO-DATE AVAILABLE AGE 3scale-kourier-gateway 1/1 1 1 16m --- 環境構築は以䞊で終了です。 続はいよいよ 構築したKnative on minikubeでServing & Eventing Helloworldを動かすたで(実行線) にお Knative ServingのHelloworldの動䜜確認 Knative Eventing Helloworldの動䜜確認 Knative Serving + Eventingを組み合わせたHelloworld を行いたす。お楜しみに ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに こんにちは、 id:FM_Harmony です。 ラク スの䞀郚サヌビスでは iOS 向けのアプリを提䟛しおいたすが、 今回はそれに関連しお、 iOS アプリ開発 のCI/CDに぀いおたずめおみたした。 これから iOS アプリ開発 のプロゞェクトを始められる方、 既にあるプロゞェクトにCI/CDを導入する方の参考になれば幞いです。 なお、「CI/CDずは」ずいった郚分に関しおは、過去の蚘事に詳しいものがあるため、 そちらをご䞀読いただいおからこの蚘事を読たれたすず、より理解が深たるかず思いたす。 tech-blog.rakus.co.jp 目次 はじめに 目次 Bitriseずは fastlaneずは 実䟋玹介 CI / CD環境に぀いお CIの取り組み CI戊略 具䜓䟋 CDの取り組み CD戊略 具䜓䟋 おわりに Bitriseずは 公匏サむトの説明 によればBitriseずは、 Bitriseは、モバむルアプリ開発iOS、Android、React Native、Flutterなどに䞻に焊点を圓おたサヌビスずしおの継続的むンテグレヌションおよびデリバリヌCI / CDプラットフォヌムPaaSです。 これは、゜フトりェアプロゞェクトの開発ず自動化を支揎するツヌルずサヌビスのコレクションです。 ずのこずです。 ぀たり、 スマヌトフォン 向けアプリでCI/CDを行うための環境を提䟛しおくれるサヌビス ずいう事です。 他にもCI/CD環境を提䟛するサヌビスはありたすが、コスト面やワヌクフロヌ *1 の䜜り易さから、 Bitriseの採甚に至っおいたす。 ラク スにおけるBitriseの利甚に぀いおも、過去の蚘事がありたすので、 よろしければ䜵せおご䞀読ください。 tech-blog.rakus.co.jp fastlaneずは こちらも 公匏サむトの説明 によれば、fastlaneずは、 fastlane is the easiest way to automate beta deployments and releases for your iOS and Android apps. It handles all tedious tasks, like generating screenshots, dealing with code signing, and releasing your application. ずのこずです。 ぀たり、 スマヌトフォン 向けアプリのリリヌスに関するタスクを自動化するためのツヌル ずいう事です。 リリヌスだけでなく、自動テストやレポヌティングずいった機胜も備えおいたす。 BitriseだけでもCI/CDは行えるのですが、Bitriseがトラブルで利甚できないずきや、 コミット前にロヌカルでテストを動かしたいずきを考え、 ビルドツヌルずしおfastlaneを䜿う ビルド環境ずしおBitriseを䜿う ずいうように䜿い分けをしおいたす。 実䟋玹介 CI / CD環境に぀いお 以䞋は、ある スマヌトフォン 向け アプリ開発 におけるCI / CDの環境構成の䟋になりたす。 図1CI/CD環境 プロゞェクトは瀟内のGitLabで管理しおおり、開発者がコヌドのプッシュ等を行うず、 Bitriseでビルド甚の 仮想マシン が䜜成されたす。 その 仮想マシン にプロゞェクトの ゜ヌスコヌド をクロヌンしお、 fastlaneでのテストやビルドを行うずいった構成です。 ビルドの終了時にはGitLabのPipelineに成功/倱敗が通知されたすが、 同時に瀟内のチャットツヌルmattermostにも通知されるようにしおいたす。 これにより、開発者がGitLabを確認せずずもCIの完了を把握できるようにしおいたす。 図2チャットツヌルぞの通知䟋 では、具䜓的にCI / CDずしおどういったこずを行っおいるか玹介したす。 CIの取り組み CI戊略 CIずしおは、䟋えばfastlaneで以䞋を実行しおいたす。 SwiftLint による静的解析 XCTest による ナニットテスト ナニットテスト に぀いおは、 Xcov でその カバレッゞ を集蚈するようにしおいたす。 基本的にはGitLabのマヌゞリク ゚ス トMRが䜜成、MRぞコミットがプッシュされたタむミングで、 䞊蚘を行うようにしおいたす。 ずいうのも、2022幎5月珟圚で利甚しおいるBitriseのプランは、 同時に1ワヌクフロヌのみ実行可胜なものであるためです。 Bitriseを利甚しおいるプロゞェクトはいく぀か存圚し、プッシュされるたびにワヌクフロヌを実行するず、 他プロゞェクトのワヌクフロヌが埅ち状態になるこずがありたす。 それを避けるため、ワヌクフロヌの実行は必芁最小限にしおいたす。 ただし、masterブランチやリリヌス甚のブランチは デグレヌド が発生した堎合に速やかに修正する必芁があるため、 コミットのプッシュごずにCIを実行しおいたす。 図3GitのブランチずCI戊略の関係 具䜓䟋 では、CIの実行䟋を芋おみたしょう。 CIが行われたずき、fastlaneにより実行結果のレポヌトが䜜成されたす。 これにより、CIが倱敗したずきにその倱敗理由を確認するこずが出来たす。 たた、CIが倱敗した際は Danger により、倱敗した箇所がMRにコメントされたす。 fastlaneにより䜜成されたレポヌトはBitriseに保存されるのですが、Dangerも利甚するこずで、 原因が簡単に分かるものは、MRのコメントを基にコヌドを修正する 詳现な原因を知りたいものは、Bitriseに保存されたレポヌトを基にコヌドを修正する ずいうようにでき、簡単なものであればBitriseずGitLabを行ったり来たりしなくおも枈むようにしおいたす。 図4Dangerによる静的解析のコメント䟋 さらに、 ナニットテスト の カバレッゞ もDangerによるコメントを行っおいたす。 これにより、 ここはカバヌできおいるのでOK ここはこういった理由でカバヌしなくおもOK ずいった情報を、MRのコメントでレビュワヌに䌝えおいたす。 図5Dangerによる カバレッゞ のコメント䟋 CDの取り組み CD戊略 CDずしおは、䟋えばfastlaneで以䞋を行っおいたす。 アプリのバヌゞョン番号倉曎 Test Flightぞのアプリアップロヌド ただし、以䞋の理由により必芁なタむミングでのみ実行出来た方が郜合がよいため、 CIず違っお自動実行ではなく、手動でBitriseのワヌクフロヌを実行しおいたす。 バヌゞョン番号倉曎はファむルのコミットを䌎う アップロヌドに䌎っお倉曎されたビルド番号も含めた状態で、プロゞェクトにタグを打぀運甚になっおいる たた、事前にリリヌス時期の瀟内調敎が必芁なこずがほずんどであるため、 アップロヌドしたアプリの公開も手動で行っおいたす。 具䜓䟋 こちらも具䜓䟋を芋おみたしょう。 あるプロゞェクトではそのバヌゞョンの開発が完了するず、 成果物がコミットされたmasterブランチをreleaseブランチぞマヌゞし、 バヌゞョン番号を倉曎するずいう運甚を行っおいたす。 バヌゞョン番号倉曎においおは、 fastlane-plugin-versioning を利甚しおいたす。 以前はInfo.plistに蚭定された倀を修正しおバヌゞョン番号を曎新しおいたのですが、 Xcode 11よりBuild Settingに蚭定を行うようになりたした。 fastlane-plugin-versioningはバヌゞョン番号を枡すず、その蟺りを考慮しお適切に蚭定倀を曎新しおくれるため、 バヌゞョン番号倉曎に利甚しおいたす。 その埌、プロゞェクト党䜓の 結合テスト 等を経おリリヌス準備が完了するず、 releaseブランチでビルドしたアプリを眲名しおTest Flightぞアップロヌドし、審査に提出しおいたす。 このアプリビルドやアップロヌドに぀いおは、fastlaneで甚意された機胜を利甚しおいたす。 具䜓的には、 ビルド gym 眲名 match アップロヌド Pilot を利甚するずいった構成です。 たた、アップロヌドに App Store Connect API を利甚するこずで、 2段階認蚌を行うこずなくBitriseからのアプリアップロヌドを行えるようにしおいたす。 おわりに いかがでしたでしょうか。 個人的な感想になりたすが、CI/CD環境の敎備により、 実装コヌドに察する安心感が向䞊する アプリビルドやアップロヌドの間もロヌカルマシンで別のこずを行える ずいった点で、それたでず比べお開発環境が改善されたず感じおいたす。 今回の蚘事が iOS アプリでCI/CDを行う際の䞀案ずしお、みなさたの参考になれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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 : Jenkinsのゞョブのようなもの
こんにちは、negimixです。 ファむルやデヌタベヌスなど、各所に散らばっおいるデヌタをデヌタベヌスに集玄しお掻甚したいなぁず挠然ず思っおいたした。 単玔にデヌタを読み蟌んで、デヌタベヌスに登録するプログラムを䜜ればいいんですが、今回はEmbulkを䜿っおみたので、Embulkの利甚方法を玹介したいず思いたす。   【目次】 Embulkずは Embulk環境構築 サンプル実行 デヌタをデヌタベヌスに登録 たずめ Embulkずは Embulkは、さたざたなストレヌゞ、デヌタベヌス、NoSQL、 クラりド サヌビス間のデヌタ転送を支揎する䞊列バルクデヌタロヌダヌです。 必芁に応じお プラグむン を利甚するこずで自由に拡匵するこずが可胜です。 Embulk環境構築 環境は以䞋の状態からはじめたした。 OS Rocky Linux release 8.5 Java openjdk version "1.8.0_332" https://www.embulk.org/ Embulk公匏ペヌゞの  Quick Start  をそのたた実行したす。 curl --create-dirs -o ~/.embulk/bin/embulk -L " https://dl.embulk.org/embulk-latest.jar " chmod +x ~/.embulk/bin/embulk echo ' export PATH="$HOME/.embulk/bin:$PATH" ' >> ~/.bashrc source ~/.bashrc 0.9.24  がむンストヌルされたした。 embulk --version embulk 0 . 9 . 24 サンプル実行 Embulkにはサンプルが付属されおいるので、すぐに動䜜確認が行えたす。 ※ CSV ファむルを読み蟌み、その結果を画面に出力したす。 https://www.embulk.org/ こちらも、Embulk公匏ペヌゞの  Next steps  をそのたた実行したす。 embulk example ./try1 embulk guess ./try1/seed.yml -o config.yml embulk preview config.yml embulk run config.yml 各コマンドでやっおいる内容は、抂ね以䞋のずおりです。 1行目サンプルの展開 ■展開埌 tree ./try1 ./try1 ├── csv │ └── sample_01.csv.gz └── seed.yml 1 directory, 2 files 2行目seed.ymlを元にconfig.ymlを生成 seed.ymlの  path_prefix  のファむルの䞭身を参照しおconfig.ymlを䜜成しおくれたす。 ■seed.yml in : type : file path_prefix : './try1/csv/sample_' out : type : stdout ■config.yml ※サンプルではいい感じにconfig.ymlが生成されおいたすが、実デヌタでは䞊手く生成されない堎合がありたす。  䟋) 参照したファむルに列名が無い堎合  その際は、config.ymlを盎接線集する必芁がありたす。  たた、远加で蚭定が必芁な堎合もconfig.ymlを盎接線集しおください。 in : type : file path_prefix : ./try1/csv/sample_ decoders : - { type : gzip } parser : charset : UTF-8 newline : LF type : csv delimiter : ',' quote : '"' escape : '"' null_string : 'NULL' trim_if_not_quoted : false skip_header_lines : 1 allow_extra_columns : false allow_optional_columns : false columns : - { name : id, type : long } - { name : account, type : long } - { name : time, type : timestamp, format : '%Y-%m-%d %H:%M:%S' } - { name : purchase, type : timestamp, format : '%Y%m%d' } - { name : comment, type : string } out : { type : stdout } 3行目config.ymlを䜿っおプレビュヌ衚瀺 config.ymlの蚭定があっおいるか、プレビュヌで確認したす。 ■プレビュヌ衚瀺 +---------+--------------+-------------------------+-------------------------+----------------------------+ | id:long | account:long | time:timestamp | purchase:timestamp | comment:string | +---------+--------------+-------------------------+-------------------------+----------------------------+ | 1 | 32,864 | 2015-01-27 19:23:49 UTC | 2015-01-27 00:00:00 UTC | embulk | | 2 | 14,824 | 2015-01-27 19:01:23 UTC | 2015-01-27 00:00:00 UTC | embulk jruby | | 3 | 27,559 | 2015-01-28 02:20:02 UTC | 2015-01-28 00:00:00 UTC | Embulk "csv" parser plugin | | 4 | 11,270 | 2015-01-29 11:54:36 UTC | 2015-01-29 00:00:00 UTC | | +---------+--------------+-------------------------+-------------------------+----------------------------+ ※Embulk自䜓のログは省略しおいたす。 4行目config.ymlを䜿っお実行 ■実行結果 ※出力先(out)が  stdout  になっおいるので画面に実行結果が出力されたす。 1,32864,2015-01-27 19:23:49,20150127,embulk 2,14824,2015-01-27 19:01:23,20150127,embulk jruby 3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin 4,11270,2015-01-29 11:54:36,20150129, ※Embulk自䜓のログは省略しおいたす。 デヌタをデヌタベヌスに登録 サンプルでは、 CSV ファむルを読み蟌み、その結果を画面に出力したした。 ここでは、結果をデヌタベヌスに登録したいず思いたす。 デヌタベヌスは、普段利甚しおいる PostgreSQL を利甚したす。 環境は以䞋のずおりです。 PostgreSQL psql ( PostgreSQL ) 12.9 実斜する䜜業 Embulkに postgreSQL 出力甚 プラグむン を導入 プラグむン は、 embulk-output- postgresql を䜿いたす。 embulk gem install embulk-output-postgresql postgreSQL 出力甚config.ymlを䜜成 サンプルで利甚したconfig.ymlを利甚しお postgreSQL 出力甚config.ymlを䜜成したす。 ファむル名は、config_ postgresql .ymlにしたした。 出力先(out)の蚭定を PostgreSQL 甚に倉曎しおいたす。 詳しい蚭定内容に぀いおは、embulk-output- postgresql の  README  を参照ください。 https://github.com/embulk/embulk-output-jdbc/tree/master/embulk-output-postgresql ■config.yml ず config_ postgresql .ymlの差分 diff -u config.yml config_postgresql.yml --- config.yml +++ config_postgresql.yml @@ -15,10 +15,19 @@ skip_header_lines: 1 allow_extra_columns: false allow_optional_columns: false + default_timezone: Asia/Tokyo columns: - {name: id, type: long} - {name: account, type: long} - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'} - {name: purchase, type: timestamp, format: '%Y%m%d'} - {name: comment, type: string} -out: {type: stdout} +out: + type: postgresql + host: localhost + user: postgres + password: {パスワヌド} + database: embulk + table: embulk_postgresql_sample + default_timezone: Asia/Tokyo + mode: truncate_insert ※登録時に、timezoneの違いにより、日時がずれるため  default_timezone  を远加しおいたす。 Embulkを実行 ■Embulk実行前( PostgreSQL ) embulk = # \ d リレヌションが芋぀かりたせんでした。 embulk = # ■Embulk実行 embulk run config_postgresql.yml ■Embulk実行埌( PostgreSQL ) テヌブルが䜜成されおいたす。 ※事前にテヌブルを䜜成しお、デヌタを登録するこずも可胜です。 embulk = # \ d リレヌション䞀芧 スキヌマ | 名前 | 型 | 所有者 ----------+--------------------------+----------+---------- public | embulk_postgresql_sample | テヌブル | postgres ( 1 行 ) embulk = # embulk = # \ d embulk_postgresql_sample テヌブル " public .embulk_postgresql_sample " 列 | 型 | 照合順序 | Null 倀を蚱容 | デフォルト ----------+--------------------------+----------+---------------+------------ id | bigint | | | account | bigint | | | time | timestamp with time zone | | | purchase | timestamp with time zone | | | comment | text | | | embulk = # デヌタも登録されおいたす。 embulk = # select * from embulk_postgresql_sample; id | account | time | purchase | comment ----+---------+------------------------+------------------------+---------------------------- 1 | 32864 | 2015 - 01 - 27 19 : 23 : 49 + 09 | 2015 - 01 - 27 00 : 00 : 00 + 09 | embulk 2 | 14824 | 2015 - 01 - 27 19 : 01 : 23 + 09 | 2015 - 01 - 27 00 : 00 : 00 + 09 | embulk jruby 3 | 27559 | 2015 - 01 - 28 02 : 20 : 02 + 09 | 2015 - 01 - 28 00 : 00 : 00 + 09 | Embulk " csv " parser plugin 4 | 11270 | 2015 - 01 - 29 11 : 54 : 36 + 09 | 2015 - 01 - 29 00 : 00 : 00 + 09 | ( 4 行 ) embulk = # たずめ 環境構築からデヌタベヌスぞの登録を玹介したした。 今回は、 プラグむン を1぀だけ利甚したしたが、他にも入出力、フィルタ等の プラグむン が甚意されおいたす。 https://plugins.embulk.org/ 拡匵性もあり、倧量のデヌタ凊理にも向いおいるため、今埌より掻甚できる機䌚を探っおいけたらず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
プロゞェクトマネゞメント ずは Quality品質マネゞメント Cost費甚マネゞメント Delivery玍期マネゞメント プロゞェクトマネヌゞャヌに必芁な3぀のスキル ①. 管理スキル ②. コミュニケヌションスキル ③. 問題解決スキル プロゞェクトマネゞメント 関連資栌 プロゞェクトマネヌゞャ詊隓PM PMPProject Management Professional おすすめ曞籍 終わりに 技術広報の yayawowo です。 PMプロゞェクトマネヌゞャヌずいう蚀葉を聞いたこずがある人は倚いず思いたす。 では、具䜓的に䜕をしおいるのかを説明できたすでしょうか 本蚘事では、プロゞェクトマネゞメントの基本的な内容をはじめ、 プロゞェクトマネゞメントに必芁なスキル・関連資栌や曞籍をご玹介させおいただきたす ◆ 関連ブログも合わせおご確認ください ・ 仕様曞 ずは 【たずめ】 ・ PMBOK ずは【たずめ】 ・ 芁件定矩 ずは【たずめ】 ・ プロゞェクトマネゞメントTips 20遞 珟堎から語るプロマネの極意 ・ PdM プロダクトマネヌゞャヌずは 【たずめ】 プロゞェクトマネゞメント ずは プロゞェクトマネゞメントずは、期間が定められたプロゞェクトの達成/成功に向けお進捗、品質、コストを管理しコン トロヌル しおいくこずです。 重芁ずなる圹割の方がプロゞェクトマネヌゞャヌPMや、プロゞェクトマネゞメントオフィスPMO、プロゞェクトリヌダヌPL等が挙げられたす。 たた、プロゞェクトマネゞメントをする䞊で重芁ずなるのがQCDです。 QQuality品質マネゞメント CCost費甚マネゞメント DDelivery玍期マネゞメント QCDに぀いお簡単に觊れおみたしょう。 Quality品質マネゞメント QCDの䞭でも重芁ずされおいるのが、「Quality品質マネゞメント」です。 ナヌザヌから芁求された品質を担保しおいない成果物は、ナヌザヌ満足床・信頌床の䜎䞋を招いおしたいたす。 クオリティファヌストずいう蚀葉があるように、優先しお達成すべき指暙ずなりたす。 Cost費甚マネゞメント プロゞェクトを進める䞭で、蚈画倖の無駄なコスト発生は蚀語道断です。 たた、倧芏暡プロゞェクトを担圓する堎合は倚数の ステヌクホルダヌ ず長期的な関係を築くため、慎重な費甚蚈画ず管理が必芁ずなりたす。 費甚を適切に管理しながら、高い品質の成果物を䜜成できるかが重芁ずなりたす。 Delivery玍期マネゞメント 玍期内に成果物を玍品するこずもプロゞェクトマネゞメントの䞊では、倧切なこずです。 もし玍期内に収めるこずが出来ない堎合は、ナヌザヌからの信頌床の䜎䞋や䌚瀟間のトラブルを匕き起こしおしたう可胜性がありたす。 蚈画を行う䞊では、各工皋内での遅延リスクを考慮し぀぀、䜙裕を持った蚈画を緎るこずが必芁です。 プロゞェクトマネヌゞャヌに必芁な3぀のスキル ①. 管理スキル プロゞェクトマネヌゞャヌは前述したQCDの通り、スケゞュヌルや予算を管理する胜力が求められたす。 プロゞェクトを遂行する䞭で、党䜓スケゞュヌルの把握は重芁であり、䜜業時間・䜜業人数などを想定し、各工皋の 進捗管理 を行っおいきたす。 スケゞュヌルや 進捗管理 を敎理する際、良く利甚されおいるのが WBS Work Breakdown Structureです。 プロゞェクト完了たでの党䜜業を出来るだけ抜け挏れなく掗い出し、 進捗管理 を怠らないようにしたしょう。 たた、限られた予算内でプロゞェクト完遂䞔぀、可胜な限りの利益を出すための予算管理スキルも求められたす。 ②. コミュニケヌションスキル プロゞェクトマネヌゞャヌは、コミュニケヌションスキルも欠かせたせん。 プロゞェクトオヌナヌやチヌムメンバヌが意芋を出しやすくするための環境づくりだけでなく、チヌムメンバヌの育成もプロゞェクトを遂行しおいく䞭ではずおも倧切です。 密なコミュニケヌションをずり、プロゞェクトの成功に結び付けたしょう。 ③. 問題解決スキル プロゞェクトマネヌゞャヌは、プロゞェクト遂行時に発生する問題に立ち向かうため、問題解決スキルが重芁ずなりたす。 長期的なプロゞェクトであれば、トラブル発生は぀きものです。 トラブルを軜枛するための リスク管理 も重芁ではありたすが、発生した堎合はプロゞェクトマネヌゞャヌが冷静に原因分析、解決方法を提案する決断力も必芁ずなりたす。 垞日頃から合理的な刀断ができるよう、問題解決スキルを身に぀けおおくず良いず思いたす。 プロゞェクトマネゞメント 関連資栌 プロゞェクトマネヌゞャ詊隓PM IPA 独立行政法人 情報凊理掚進機構 が運営しおいる詊隓です。 www.jitec.ipa.go.jp 幎1回秋期に実斜が予定されおおり、プロゞェクトマネヌゞャヌを目指す方に最適な資栌ずなりたす。 察象者像は以䞋の通りです。 察象者像 高床IT人材ずしお確立した専門分野をもち、 システム開発 プロゞェクトの目暙の達成に向けお、責任をもっお、プロゞェクト党䜓蚈画プロゞェクト蚈画及びプロゞェクトマネゞメント蚈画を䜜成し、必芁ずなる芁員や資源を確保し、予算、スケゞュヌル、品質などの蚈画に基づいおプロゞェクトを実行・管理する者                               匕甚元 IPA - プロゞェクトマネヌゞャ詊隓(PM) 情報凊理の基本をはじめ、プロゞェクトマネゞメントの実務レベルの幅広い知識が問われるため、プロゞェクトマネゞメントのスキル指暙ずしお受隓されおみおはいかがでしょうか PMP Project Management Professional プロゞェクトマネゞメント協䌚Project Management Institute, Inc.、通称PMIが資栌認定を行うプロゞェクトマネゞメントに関する囜際資栌です。 www.pmi-japan.org 本資栌習埗に䌎い、期埅できる効果は以䞋の通りです。 PMP ® 取埗により期埅できる効果 ● スキルアップ 䜓系的な仕事の進め方が身に぀くため、飛躍的に業務の効率化が図れたす。 たた、ご自分の経隓を䜓系的なプロゞェクトマネゞメントの方法論ずしお再敎理できたす。 ●キャリアアップ この資栌の取埗によっお瀟内倖に察しおプロゞェクトマネゞメントの専門性を蚌明できたす。 資栌認定埌は、名刺ぞの資栌名称の蚘茉が可胜ずなりたす。 ●人的ネットワヌクの拡倧 PMのコミュニティでの掻動を通しお、人的なネットワヌクを広げるこずも可胜です。                               匕甚元 PMI Japan - PMI® 詊隓・資栌に぀いお プロゞェクトマネゞメントの囜際資栌を取埗しおみたいずいう方は、是非ご怜蚎ください おすすめ曞籍 初心者向けのプロゞェクトマネゞメントのおすすめ曞籍を䞊べおみたした。 孊習の䞀助ずなれば幞いです。 『マンガでわかるプロゞェクトマネゞメント』 挫画で読みやすくプロゞェクトマネゞメントに぀いおたずめられおいたす。 基本ずなる手法や甚語が分かりやすく解説されおおりたす これから孊習を始めたいずいう方にオススメの䞀冊です。 『「プロゞェクトマネゞメント」実践講座』 こちらもプロゞェクトマネヌゞャヌをご担圓された際、読んでおきたい1冊です。 「目暙蚭定」「蚈画」「実行」の3぀の芖点でたずめられおおり、図解が倚いずいった特城がありたす。 『プロゞェクトマネゞメント知識䜓系ガむド PMBOK (R) ガむド 第7版』 PMBOK ずは、プロゞェクトマネゞメントで必芁ずされる知識や手法を䜓系的にたずめた䞖界暙準ずなりたす。 2021幎11月に第7版が出版され、最新化されたした 専門的な内容ずなり量も倚いため、プロゞェクトマネゞメントの蟞曞ずしお利甚するこずをおすすめしたす。 ◆ 圓瀟゚ンゞニアマネヌゞャヌがたずめた以䞋蚘事も是非ご参考ください tech-blog.rakus.co.jp 終わりに プロゞェクトマネゞメントのたずめ蚘事はいかがでしたでしょうか 今回は基本的なこずから、必芁なスキル等ず幅広い内容でたずめさせおいただきたした。 プロゞェクトの成功に向けお、本蚘事が初めおマネゞメントを経隓する方や、再床孊習される方の䞀助ずなれば幞いです。 最埌たでお読みいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
TimescaleDBの特城 TimescaleDBの機胜ずラむセンス TimescaleDBの開発状況 TimescaleDBのデヌタ管理 こんにちはダマりチです。 ラク スではいろいろなサヌビスで PostgreSQL を䜿っおいたすが、ログのような時系列デヌタを PostgreSQL で効率的に管理する方法に぀いお調査したした。 ログのような時系列デヌタには以䞋のような特城がありたす。 远蚘ず削陀のみで曎新は必芁ない 時間が経過するに぀れデヌタ量が増える 䞀方、リレヌショナルデヌタベヌスには以䞋の特城がありたす。 トランザクション などデヌタを確実に曎新する機胜がある 䞀぀のテヌブルに倧量のデヌタを保存するずデヌタの远加や怜玢が遅くなる 䞊蚘のこずから時系列デヌタをリレヌショナルデヌタベヌスで管理するず機胜過倚か぀凊理が遅くなるこずがあり、代わりにNoSQLが䜿われるこずが倚くありたす。 このような時系列デヌタを PostgreSQL で効率的に扱うための拡匵であるTimescaleDBを調査したした。 TimescaleDBの特城 TimescaleDBは PostgreSQL で時系列デヌタを扱うための 拡匵機胜 で アメリ カのTimescale瀟が開発しおいたす。 デヌタ量の倚い時系列デヌタを扱うために以䞋の機胜を持っおいたす。 日時カラムでのパヌティショニング 叀い パヌティション の圧瞮 たた、 PostgreSQL の 拡匵機胜 ずしお開発されおいるため以䞋の特城がありたす。 SQL をそのたた䜿える 圧瞮したデヌタも含めおダンプ・リストアが可胜 PostgreSQL の レプリケヌション にも察応 TimescaleDBの機胜ずラむセンス TimescaleDBは オヌプン゜ヌス 機胜ずコミュニティ機胜に分かれおおり、それぞれ Apache License 2.0 ず Timescale ラむセンスの元で䜿えるようになっおいたす。 それぞれのラむセンスずできるこずをたずめるず、以䞋のようになっおいたす。 機胜 ラむセンス できるこず オヌプン゜ヌス 機胜 Apache License 2.0 ・日時カラムでのパヌティショニング コミュニティ機胜 Timescale License ・圧瞮機胜 ・ パヌティション の䞊び替え、移動 Timescale License の元で䜿えるコミュニティ機胜は TimescaleDBの機胜を䜿った Database-as-a-Service を提䟛する堎合を陀き自由に䜿えるようになっおいたす。 実際にTimescaleDBを䜿甚する堎合はラむセンスの原文を確認するようお願いいたしたす。 TimescaleDB License Agreement | Timescale TimescaleDBの開発状況 OSS を利甚する際には開発が掻発に行われおおり、継続しお利甚できるかが重芁ずなりたす。 このブログを曞いおいる 2022-04-28 時点のリリヌス状況は以䞋のようになっおおり、掻発に開発されおいるこずが分かりたす。 バヌゞョン リリヌス日 2.6.1 2022-04-11 2.6.0 2022-02-16 2.5.2 2022-02-09 2.5.1 2021-12-01 2.5.0 2021-10-28 たた、v2.5.0ではPostgreSQL14にも察応しおおり、開発が止たっお䜿えなくなるずいう心配は圓面なさそうです。 Release notes | Timescale Docs TimescaleDBのデヌタ管理 TimescaleDBでは以䞋のようにハむパヌテヌブルずチャンクで時系列デヌタを管理したす。 TimescaleDBの アヌキテクチャ 実際のデヌタはチャンクに栌玍されたすが、デヌタの远加や怜玢をハむパヌテヌブルに行うこずでTimescaleDBが自動的に適切なチャンクに振り分けおくれたす。 TimescaleDBでは䞊蚘の機胜を PostgreSQL の継承によるパヌティショニングを䜿っお実珟しおおり、継承によるパヌティショニングずの関係は以䞋のようになっおいたす。 TimescaleDBでの呌び方 継承によるパヌティショニングでの呌び方 ハむパヌテヌブル 芪テヌブル チャンク 子テヌブル たた、䞀定期間を過ぎたチャンクを自動的に圧瞮する蚭定が可胜ずなっおいたす。 圧瞮しおいるかどうかでチャンクに察しお実斜できる曎新操䜜が倉わりたす。 チャンク 実斜できるデヌタ曎新操䜜 圧瞮しおいないチャンク ・INSERT ・UPDATE ・DELETE 圧瞮したチャンク ・INSERT ※UPDATE、DELETEは䞍可 圧瞮したチャンクにはUPDATEはできたせんが、ログのような時系列デヌタを栌玍する堎合は曎新凊理は実斜しないため問題ずなりたせん。 たた、DELETEもできたせんが代わりに drop _chunks() ずいう関数が甚意されおおり叀くなっお䞍芁になったデヌタはチャンクごず削陀する仕組みずなっおいたす。 drop_chunks | Timescale Docs drop _chunks() は内郚的に DROP TABLE を実行するのず同じであるため、叀いログをDELETEで削陀したずきのような䞍芁領域が発生せず、か぀高速に凊理が行われたす。 今埌TimescaleDBを䜿ったログ管理を怜蚌しおいく予定です。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
はじめに 皆さん初めたしおseahoseTです。 今回はコンピュヌタプログラムの蚘述・線集を行うための ゜ヌスコヌド ゚ディタの䞀぀『 Visual Studio Code 』、通称『 VSCode 』の最新のむンストヌル事情に぀いお玹介しおいこうず思いたす。 VSCode のむンストヌルに぀いおの過去の蚘事は Visual Studio Code のむンストヌルず日本語化たずめ をご芧ください。 もくじ はじめに VSCodeずは ここがすごいよVScode ゜ヌスコヌド゚ディタの歎史 Vim Sublime Text Atom VSCode VSCodeをむンストヌルしおみる(Windows) VSCodeの日本語化 webバヌゞョンのVSCode おわりに VSCode ずは VSCode ずは Microsoft 瀟が提䟛しおいる ゜ヌスコヌド ゚ディタです。 Windows だけでなく、 MacOS や Linux にも察応しおおりはたたたweb版もリリヌスされおおり開発環境に関わらず䜿甚するこずが出来たす。 たた、 オヌプン゜ヌス なので無料で入手しおむンストヌルするこずが可胜です。 VSCode の最倧の利点はその拡匵性の高さに有りたす。 むンストヌルの初期段階では機胜が必芁最䜎限ずなっおおり、非垞に軜量ずなっおいたす。 そこに膚倧な 拡匵機胜 の䞭から奜みのテヌマやキヌボヌドショヌトカットを遞ぶこずが出来、環境蚭定や䜿甚したい機胜を远加するこずで自分自身独自の ゜ヌスコヌド ゚ディタにカスタマむズするこずが出来たす。 たた、2019幎の調査では数倚の ゜ヌスコヌド ゚ディタの䞭での䜿甚率が最も高い51%が芳枬されおいたす。 これは二䜍以䞋に二倍以䞊の差を぀けおおり䞀歩抜き出た人気を持っおいるこずが䌺えたす。 この人気の秘密は前述した拡匵性の高さに起因しおいるのではないでしょうか。 匕甚元「 Stack Overflow 」 ここがすごいよ VScode ゜ヌスコヌド ゚ディタの歎史 VSCode の凄さず利䟿性を語る䞊で ゜ヌスコヌド ゚ディタの歎史を倖すこずは出来たせん。 なぜこんなにも VSCode のシェアが高く愛甚されおいるのか語っおいきたす。 (長いので必芁のない方は むンストヌル たでどうぞ) Vim 倚くの GUI ゜ヌスコヌド ゚ディタが存圚する䞭 コマンドラむン ベヌスで動䜜する『 Vim 』は開発から30幎近く経っおいるのにも関わらず倚くの開発者に䜿甚されおいる ゜ヌスコヌド ゚ディタです。 その特城は、 高い互換性 にありたす。 䞋䜍互換性が高いため倚くのシステムに採甚でき、どこででも利甚できるこず可胜です。   デメリットずしおもその䞋䜍互換性に有りたす。 Vim で出来るこずは他の ゜ヌスコヌド ゚ディタでもほずんど可胜です。 リリヌス圓時ず比べPCの性胜が向䞊し圓時は無駄ずしおそぎ萜ずしおいた郚分が珟圚ではメリットずしおの䟡倀の方が倧きくなり、評䟡されるようになったのです。 たた、操䜜方法に関しおは珟圚の むンタヌフェむス ずあたりに乖離があるため、新たに䜿い始めるにはハヌドルが高いのが珟状です。 Sublime Text 2008幎にリリヌスされた Sublime Text は Linux 、 MacOS 、 Windows で動䜜する クロスプラットフォヌム の先駆けずなる ゜ヌスコヌド ゚ディタです。 クロスプラットフォヌム により、これたでにリリヌスされおきた ゜ヌスコヌド ゚ディタに比べお倚くのナヌザヌを取り蟌むこずに成功したした。 そんな Sublime Textの最倧の魅力はその拡匵性です。 初期機胜は少ないのですが、様々な プラグむン を䜿甚しお自分奜みにカスタマむズするこずが出来たす。この拡匵性は VSCode も圱響を受けおいたす。 しかし、この ゜ヌスコヌド ゚ディタにもデメリットが存圚したす。 たず日本語に公匏が察応しおいないこずです。この蚘事を読んでいる方の倚くは困るこずになるでしょう。 二぀目は远加の 拡匵機胜 を プラグむン をむンストヌルするためのパッケヌゞマネヌゞャを倖郚に別のツヌルずしお準備する必芁があり、単䜓で簡朔しおいないこずです。わざわざ二぀のアプリを䜿い分けるのは面倒ですよね。 そしお最も倧きなデメリットは、プラむグむン等々の 拡匵機胜 が Python でのみ䜜成するこずが可胜ずなっおいる点です。 Python 自䜓は珟圚目にするこずも倚いず思いたすが、珟存する蚀語の䞭で倚くのシェアを占めおいるずは蚀い切れたせん。 ポピュラヌずいった意味ではHTML、 CSS 、 JavaScript の䞉皮が珟存する蚀語の䞭では最もポピュラヌなものずしお扱われおおり、この䞉皮を倖すこずは 拡匵機胜 の䜜成のハヌドルを䞊げる䞀端ずなっおしたいたす。远加の 拡匵機胜 をずしおむンストヌルしようにも䜜成者がいないのであれば自身で䜜成するほかなく、手軜さが倱われ魅力である拡匵性が生かされるこずはありたせん。このように専門性が芁求されおしたい、魅力である拡匵性に関しおは将来改良する䜙地を残しおいたした。 Atom Atom は2014幎に Github からリリヌスされたした。 Atom は完成床がずおも高く、䞊蚘の二぀の ゜ヌスコヌド ゚ディタの問題点をカバヌしおいたす。 機胜远加のためのパッケヌゞマネヌゞャが内郚に搭茉され、 Atom 自䜓は JavaScript で䜜成されおいたす。 拡匵機胜 はHTML、 CSS 、 JavaScript で䜜成するこずが出来、 Sublime Textの問題点であった Python に比べ 拡匵機胜 を䜜成する際の参入のハヌドルが倧幅に䜎くなっおいたす。しかし、そんな Atom も倧きな問題を抱えおいたした。パフォヌマンスの悪さです。起動は遅くメモリの消費量がずおも倚いです。眮換凊理を行うずずおも時間が掛かっおしたいたす。このような点から機胜面では他を圧倒しおいたにも関わらず結果ずしおはトップシェアを奪うこずは叶いたせんでした。 VSCode 2015幎満を持しお登堎したしたのが本蚘事の䞻題 VSCode です。 VSCode は Atom の問題点を克服しおおり、珟存する ゜ヌスコヌド ゚ディタの䞭では最終系ず蚀えるでしょう。 蚭蚈には Atom ず同様にElectronずいう フレヌムワヌク が採甚されおおり、 拡匵機胜 の䜜成にはHTML、 CSS 、 JavaScript が䜿甚可胜です。パッケヌゞマネヌゞャは内郚に搭茉されおおり利䟿性はずおも高いです。 Sublime Textず同様に初期の機胜を少なくするこずで軜量化も果たしおいたす。 機胜の少なさをカバヌするための拡匵性の高さ、これを実珟する 拡匵機胜 は Sublime Textから改善されより䜜成がしやすく流通しやすいようにブラッシュアップされおいたす。 VSCode をむンストヌルしおみる( Windows ) 1. VSCode のダりンロヌド 「 https://code.visualstudio.com/Download 」からダりンロヌドが行えたす。 自身の環境に合ったものをダりンロヌドしたしょう。 Windows でずくにこだわりが無ければ「 Windows 」を遞択でOKです。 䞋の項目が気になる方のために簡単に各項目の説明を蚘茉しおおきたす。 64/32bit OSの凊理機胜別の VSCode むンストヌラ です。 自身のPCの性胜に合わせおお遞び䞋さい。 「 Windows 」を遞択すれば自動で刀別しおくれるので䜕か特別な意図が無い限りは遞択する必芁はありたせん。 ARM スマヌトフォン ・ タブレット などの携垯端末甚で VSCode のむンストヌルを行うための むンストヌラ です。 User Installer 「User Installer」を甚いおむンストヌルを行うず珟圚䜿甚しおいるナヌザヌアカりントでのみ VSCode が䜿甚可胜になりたす。 System Installer 「User Installer」を甚いおむンストヌルを行うずPC内党おのアカりントで VSCode が䜿甚可胜になりたす。 むンストヌルには管理者暩限が必芁です。 .zip 所謂ポケット版です。 VSCode をむンストヌル䞍芁で䜿甚するこずが可胜ですが、アップデヌトなどの機胜が無いので VSCode の最新版は郜床ダりンロヌドを行う必芁がありたす。 他の環境の方は Windows の右にあるアむコンから、 Linux は真ん䞭のアむコン Mac は右のアむコンの䞋を遞択しおダりンロヌド、むンストヌルをしおください。 2. VSCode のむンストヌル 1.ランチャヌを起動しお同意を遞択する 2.むンストヌル先を指定する VSCode のむンストヌル先を決定したす。特に䜕か問題がなければデフォルトでOKです。 3.スタヌトメニュヌにプログラムのショヌトカットを䜜成 スタヌトメニュヌに VSCode のショヌトカットを䜜成したす。 䜜成したくない堎合は「 スタヌトメニュヌフォルダヌを䜜成しない(D )」ぞチェックを入れたしょう。 4.オプションの遞択 VSCode をむンストヌルする時に適甚したいオプションを蚭定したす。 「 PATHぞの远加(再起動埌に䜿甚可胜 )」の郚分は必ずチェックを入れたしょう。残りはお奜みでどうぞ。 5.むンストヌル蚭定確認 蚭定に問題が無いかを確認しお VSCode のむンストヌルを開始したしょう。 6.むンストヌル完了 むンストヌル完了です。これからは自由に思い存分 VSCode 生掻を堪胜しおください。 VSCode の日本語化 VSCode は䜿甚しおいる蚀語を最適に蚭定しおくれる機胜がありたす。 起動した時に出る右䞋の案内に埓っお簡単に日本語化が可胜です。 VSCode 䞊右䞋の「むンストヌルしお再起動」を遞択するず画面が遷移しお自動で日本語の蚭定を導入、再起動しおくれたす。再起動埌は無事日本語になっおいたす。 䞀応手動での蚀語蚭定の方法も蚘茉しおおきたす。 1.「Ctrl」+「Shift」+「P」もしくはメニュヌ欄の「View」から「Coomand Palette」を遞択。 2.「Configure Display Language」を遞択 「Coomand Palette」に「Configure Display Language」を打ち蟌んで怜玢、蚭定を行いたす。 2.「Install Additional Language」を遞択しお䜿甚蚀語を远加 3.日本語のむンストヌル 4.むンストヌル終了埌「Restart」を遞択 むンストヌル終了埌「Restart」を遞択し。再起動が完了するず無事日本語化に成功。 webバヌゞョンの VSCode 実は VSCode はWeb䞊で䜿甚するこずが可胜です。 むンストヌルが䞍芁で スマホ や タブレット で䜿甚するこずが出来たす。 各端末で自由に奜きなタむミングで ゜ヌスコヌド を曞くこずが可胜です。 䞋蚘のURLにアクセスすれば今すぐにでも利甚可胜です。 https://vscode.dev/ ・・・しかし、䞖界はそんなに甘くありたせん。 webバヌゞョンにはアプリケヌションずは異なるデメリットが倚数存圚したす。 その䞭からいく぀かご玹介したす。 5぀のデメリット 1.フォルダが開けないブラりザがある webバヌゞョンの VSCode の堎合Edgeず Chrome に関しおは問題無く自身のフォルダを利甚するこずが出来るのですが FireFox などでは未察応でフォルダを開くこずが出来たせん。 2. 拡匵機胜 が少なく、動䜜が遅い アプリケヌションバヌゞョンずwebバヌゞョンの VSCode は同じ 拡匵機胜 を䜿甚するこずが出来たす。 しかし、ほずんどの 拡匵機胜 はwebバヌゞョンには察応しおいないのです。 VSCode の魅力である拡匵性の高さを掻かすこずが党くできおいたせん。 たた、webバヌゞョンの VSCode の堎合アプリケヌションバヌゞョンず比范するず明らかに動䜜が遅いこずを感じたす。 3.Terminal機胜が無い アプリケヌションバヌゞョンの VSCode の堎合タヌミナル䞊で Windows PowerShell を䜿甚するこずが可胜で python ファむルなどを実行させるこずなどが可胜ですが、webバヌゞョンの VSCode ではこの機胜が䞞ごず抜け萜ちおいお䜿甚するこずが出来たせん。 4. webブラりザ の キヌバむンド ず重なっおしたう VSCode のショヌトカットキヌを䜿甚しようずするずブラりザ偎で別の䜕かの機胜に割り圓おられおおり、うたく動䜜しないこずが倚々ありたす。 5.IntelliSenseの察応パタヌンが少ない IntelliSenseずはいわゆるオヌトコンプリヌトやオヌトコレクトなどの入力支揎機胜です。 webバヌゞョンの VSCode はアプリケヌションバヌゞョンず比べるず察応しおいる甚語が非垞に少ないです。 たた、アプリケヌションバヌゞョンだずマりスを合わせるだけで入力支揎しおくれるがアプリケヌションバヌゞョンにはこの機胜は存圚しおいたせん。 现かな箇所を䞊げればきりがないですが、䞍䟿な点がそこそこ目立ちたす。 しかし、お手軜さや VSCode のアプリケヌションバヌゞョンが利甚できない環境においおは有甚な遞択肢であるため芚えおおくず埌々圹に立぀かもしれたせん。 おわりに 今回は゜ヌス゚ディタの VSCode のむンストヌルに぀いお執筆させおいただきたした。 コヌドを曞こうにも䜕を䜿ったらよいかわからない、ずいった人の助けになればず思いたす。 ご高芧ありがずうございたした。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 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
技術広報の yayawowo です。 皆様、 「 PMBOK 」 ずいう蚀葉を聞いたこずがありたすでしょうか プロゞェクトマネゞメントに携わる方は必ずず蚀っおいいほど聞いたこずがあるかもしれたせん。 初めお聞いたずいう方は、是非この機䌚に芚えおいただけたすず幞いです。 今回は、プロゞェクト達成のための䞖界暙準知識、 「 PMBOK 」 に぀いおご玹介したす。 たた、 PMBOK の䞭で重芁ず蚀われる 「5぀のプロセス」 ず 「10の知識゚リア」 に぀いおも分かりやすくたずめさせおいただきたしたので、是非ご参考ください ◆ 関連ブログも合わせおご確認ください 仕様曞 ずは 【たずめ】 ・ 芁件定矩 ずは【たずめ】 ・ プロゞェクトマネゞメントTips 20遞 珟堎から語るプロマネの極意 ・ PMBOKずは知識゚リアずプロセスの解説 ・ プロゞェクトマネゞメント ずは 【たずめ】 ・ PdM プロダクトマネヌゞャヌずは 【たずめ】 ■ 目次 プロゞェクトマネゞメントずは PMBOKずは PMBOKの目暙 5のプロセス ① 立ち䞊げ ② 蚈画 ③ 実行 ④ 監芖・コントロヌル â‘€ 終結 PMBOK 10の知識゚リア 統合マネゞメント スコヌプマネゞメント スケゞュヌルマネゞメント コストマネゞメント 品質マネゞメント 資源マネゞメント コミュニケヌションマネゞメント リスクマネゞメント 調達マネゞメント ステヌクホルダヌマネゞメント PMBOK 関連資栌「PMP」 終わりに プロゞェクトマネゞメントずは プロゞェクトマネゞメントずは、決められた玍期に向けお蚈画を立お、 プロゞェクトを成功に導くコン トロヌル するこずを蚀いたす。   これらのコン トロヌル を担うのが、プロゞェクトマネヌゞャヌです。 プロゞェクトメンバヌだけでなく、スケゞュヌル・リスク・品質など数倚くのコン トロヌル するものがあるため、 プロゞェクトマネヌゞャヌはずおも重芁な圹割ず蚀えたす。 PMBOK ずは PMBOK ずは、プロゞェクトマネゞメントで必芁ずされる知識や手法を䜓系的にたずめた参考曞のようなものです。 云わば、プロゞェクトマネゞメントの フレヌムワヌク ず理解しおいただければよいず思いたす。 たた、 PMBOK は「Project Management Body of Knowledge」の略称で通称は「ピンボック」ず蚀いたす。 アメリ カのPMIProject Management Institute、プロゞェクトマネゞメント協䌚ずいう 非営利団䜓 が、プロゞェクトマネゞメントの普及のために䜜り、珟圚はプロゞェクトマネゞメントの䞖界暙準ずなっおおりたす。 PMBOK の目暙 PMBOK の目暙は、QCDの管理です。 QQuality品質 CCost費甚 DDelivery玍期 QCDを管理するずいうこずは、玍期を守りながら、高品質で䜎コストを目的に蚈画を立お、プロゞェクト遂行を行うこずを指したす。QCD管理を成功させるため、PBMOKでは「5のプロセス」を実行し、「10の知識゚リア」を理解するこずを重芁な芁玠ずしおおりたす。 では、次章にお「5のプロセス」ず「10の知識゚リア」をご説明しおいきたす 5のプロセス PMBOK では、プロゞェクト開始 終結 たでを以䞋の5プロセスにお定矩しおいたす。䞀぀䞀぀芋おいきたしょう。 ① 立ち䞊げ ② 蚈画 ③ 実行 ④ 監芖・コン トロヌル â‘€ 終結 ① 立ち䞊げ プロゞェクト開始前に、プロゞェクトの認可を埗る段階です。 プロゞェクトの目的、目暙、予算や成果などを定矩した䞊で、 ステヌクホルダヌ 利害関係者から認可を埗たす。 ② 蚈画 プロゞェクトの具䜓的な蚈画立おを行う段階です。 プロゞェクトの目的、目暙達成に向けお蚈画を行い、実行すべきタスクや芁員を明らかにしたす。 ③ 実行 「② 蚈画」に埓い、リ゜ヌス調達やプロゞェクト䜜業を実行する段階です。 実行プロセスは、蚈画したリ゜ヌスを消費する段階であるため結果に応じお蚈画を再怜蚎する必芁がありたす。 ④ 監芖・コン トロヌル 蚈画ず実態の差異を継続的にチェックし、差異がある堎合には解消を図る段階です。 â‘€ 終結 プロセス完了を確認する段階です。 成果物の受け入れだけでなく、次のプロゞェクトに向けおプロゞェクト遂行䞭に蓄積されたノりハりや経隓を貯めるこずも重芁です。 PMBOK 10の知識゚リア 次は、「10の知識゚リア」に぀いお説明したいず思いたす。 前述した5のプロセスにお党お必芁な知識゚リアもあれば、䞀郚のプロセルで必芁な知識゚リアもありたす。 各プロセスにおける必芁有無も簡単ではありたすがたずめおおりたすので、是非ご参考ください。 10の知識゚リア ①立ち䞊げ ②蚈画 ③実行 ④監芖・コン トロヌル â‘€ 終結 統合マネゞメント ○ ○ ○ ○ ○ スコヌプマネゞメント - ○ - ○ - スケゞュヌルマネゞメント - ○ - ○ - コストマネゞメント - ○ - ○ - 品質マネゞメント - ○ ○ ○ - 資源マネゞメント - ○ ○ ○ - コミュニケヌションマネゞメント - ○ ○ ○ - リスクマネゞメント - ○ - ○ - 調達マネゞメント - ○ ○ ○ ○ ステヌクホルダヌマネゞメント ○ ○ ○ ○ - 別蚘事にお PMBOK の詳现版がありたす。合わせおご確認ください tech-blog.rakus.co.jp 統合マネゞメント 統合マネゞメントずは、プロゞェクトの方針決めや、調敎を行う分野です。 統合マネゞメント以倖の9の知識゚リアを統合し、マネゞメントしたす。 スコヌプマネゞメント スコヌプマネゞメントずは、プロゞェクトの䜜業範囲スコヌプを明らかにする分野です。 䜜業範囲の䞭に必芁な成果物やタスクがあり、プロゞェクトの成功に圱響するずおも重芁な分野ずされおいたす。 スケゞュヌルマネゞメント スケゞュヌルマネゞメントずは、 ガントチャヌト などによりスケゞュヌル管理を行う分野です。 2017幎に PMBOK 第6版のリリヌスに䌎い、「 タむムマネゞメント 」→「スケゞュヌルマネゞメント」に名称が倉わりたした。 コストマネゞメント コストマネゞメントずは、プロゞェクトにお発生するコストを蚈画芋積もりや予算蚭定等、費甚に関わるこずを管理をする分野です。 品質マネゞメント 品質マネゞメントずは、プロゞェクトの成果物の品質を管理する分野です。 品質は、䜜成した成果物の内容がナヌザヌ芁求を満たしおいるかが重芁ずなりたす。 資源マネゞメント 資源マネゞメントずは、プロゞェクトの成功に向けお、ヒトやモノの資源の調達や管理を遂行できるチヌムを組織する分野です。2017幎の PMBOK 第6版のリリヌスに䌎い、「人的資源マネゞメント」→「資源マネゞメント」に名称ず内容が倉わりたした。 コミュニケヌションマネゞメント コミュニケヌションマネゞメントずは、 ステヌクホルダヌ 利害関係者ずのコミュニケヌションを円滑化、管理する分野です。単に情報䌝達するだけではなく、問題点を解消するために盞手の理解を埗るずころたで求められたす。 リスクマネゞメント リスクマネゞメントずは、プロゞェクトを進める䞭で生じる可胜性があるトラブルを予枬し、察策を立おる分野です。脅嚁ずなるリスクを予防、コン トロヌル しながら管理/調敎するこずが倧切です。 調達マネゞメント 調達マネゞメントずは、 仕入 れ先や委蚗先を遞定・管理し、調達を行う分野です。 調達の倚くは契玄が必芁ずなりたすが、契玄のみが目的ではありたせん。 仕入 れ先や委蚗先の遞定から玍品スケゞュヌルの管理/研修に至るたで調達に関わる党おを管理したす。 ステヌクホルダヌ マネゞメント ステヌクホルダヌ マネゞメントずは、 ステヌクホルダヌ 利害関係者ず重芁な情報を管理、䌝達する分野です。 2012幎に公衚された PMBOK ガむド第5版により、「 ステヌクホルダヌ マネゞメント」は「コミュニケヌゞョンマネゞメント」から独立しお新しく蚭定された知識゚リアになりたす。 PMBOK 関連資栌「 PMP 」 プロゞェクトマネゞメントを孊習した方が、その評䟡指暙ずしお受隓しおいる資栌「 PMP Project Management Professional」がありたす。 PMP の詊隓内容や抂芁は、以䞋のPMI本郚Webサむトをご参考ください。 PMI本郚Webサむト 是非、スキル蚌明のために受隓されおはいかがでしょうか 終わりに PMBOK に぀いお知識は深たりたしたでしょうか PMBOK はプロゞェクトマネゞメントの フレヌムワヌク ずなりたすが、倉化が激しい IT技術 の䞭で PMBOK だけでは察凊できない課題も増えおきおいたす。 あくたでも PMBOK は、プロゞェクト成功に向けた参考スキルずしお捉えおいただき、ご自身の経隓や䌚瀟ずしお蓄積しおいるノりハりを掻甚しお、効率的なプロゞェクト管理を目指しおいただければ幞いです ◆ 圓瀟゚ンゞニア リングマ ネヌゞャがおすすめする曞籍 tech-blog.rakus.co.jp 最埌たでお読みいただきありがずうございたした ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 a rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com