TECH PLAY

ニフティ株匏䌚瀟

ニフティ株匏䌚瀟 の技術ブログ

å…š517ä»¶

はじめに こんにちは、サヌビスシステムグルヌプの䜐々朚です。 最近、倚くの開発チヌムでマむクロサヌビスアヌキテクチャが話題になっおいたすが、実際に導入しおみるず「思っおたより倧倉だった…」ずいう声もよく聞きたす。そんな䞭で泚目されおいるのが「 モゞュラヌモノリス 」ずいう考え方。今回は勉匷䌚や自䞻孊習で孊んだこずをたずめおみたした。 モゞュラヌモノリスずは モゞュラヌモノリスは、゜フトりェアアヌキテクチャの䞀぀のアプロヌチです。 埓来のモノリシックアヌキテクチャずマむクロサヌビスアヌキテクチャの䞭間的な䜍眮づけずしお考えられおいお、 マむクロサヌビスを取り入れる䞊で課題があるのでモゞュラヌモノリスからはじめようずいった遞択肢 でもありたす。 たずは、マむクロサヌビス導入にあたっおの課題に぀いお觊れたいず思いたす。 マむクロサヌビスの珟実理想ず珟実のギャップ マむクロサヌビスが解決しおくれるこず マむクロサヌビスアヌキテクチャには確かに魅力的な利点がありたす。 スケヌラビリティ : サヌビスごずに必芁な分だけスケヌルできる 技術の自由床 : サヌビスに最適な技術を遞べる チヌムの独立性 : 各チヌムが自分のペヌスで開発・デプロむできる ですが、新しい悩みも生たれおきたす… 分散システムならではの難しさ ネットワヌク通信による耇雑さ マむクロサヌビスでは各サヌビス間の通信がネットワヌクを介しお行われるため、モノリスにはない課題が生たれたす。 ネットワヌク障害ぞの察応 : 通信゚ラヌ、タむムアりト、パケットロスなどぞの察凊が必芁 レむテンシの増加 : サヌビス間の呌び出しにネットワヌク遅延が発生 障害の波及 : 1぀のサヌビスの障害が他のサヌビスに連鎖的に圱響する可胜性 トランザクション管理の耇雑さ モノリスでは簡単だった凊理も、マむクロサヌビスだず途端に耇雑に。 【モノリスの堎合】 泚文確定 → 圚庫確保 → 決枈 → ✗倱敗 → ロヌルバックしおリトラむすればOK 【マむクロサヌビスの堎合】 泚文確定 → 圚庫確保 → ✗倱敗 → 決枈 → 単玔なロヌルバックができない、専甚のリカバリ凊理が必芁 マむクロサヌビス導入前には目的を明確に   こんな理由はちょっず危険 「最新技術を䜿っおみたいから」 「他の䌚瀟もやっおるから」   こんな目的なら良さそう 機胜ごずに独立しおスケヌルしたい チヌム間の開発サむクルを独立させたい 特定の技術芁件に察応したい マむクロサヌビスが向かない堎面もある こんな状況だず、マむクロサヌビス導入は慎重に考えた方が良さそうです。 スタヌトアップの初期段階 システムがただシンプルな時期は、マむクロサヌビスの運甚コストの方が重い 芁件がコロコロ倉わる時期には、サヌビス境界の蚭蚈が難しい ドメむンがただ曖昧な時 サヌビスの境界が䞍明確だず、頻繁に境界を倉曎するこずになる ネットワヌク通信でパフォヌマンスが悪くなるだけになりがち モゞュラヌモノリスいいずこ取りのアプロヌチ モゞュラヌモノリスは、マむクロサヌビスずモノリスの「いいずこ取り」を目指したアプロヌチです。 こんな特城がありたす: 同じアプリケヌションの䞭でモゞュヌルずしお分割 サヌビス間の通信はネットワヌクを䜿わない 各モゞュヌルの独立性は保ち぀぀、分散システムの耇雑さは避けられる 基本的な考え方: DDDドメむン駆動蚭蚈ず盞性が良い サヌビス・ドメむンをきちんず分離 高凝集・疎結合を目指す モゞュラヌモノリスの良いずころ・気になるずころ 良いずころ   開発の独立性が保おる モゞュヌル境界がはっきりしおいれば、独立した開発ができる 将来マむクロサヌビスにしたくなった時の土台にもなる   運甚がシンプル ネットワヌク通信の゚ラヌ凊理で悩たなくお枈む 単䞀DBなので、デヌタの敎合性確保が楜   段階的に進められる 必芁に応じお個別モゞュヌルをマむクロサヌビス化できる 気になるずころ   スケヌリングに制玄がある リ゜ヌスを共有するので、個別モゞュヌルだけスケヌルするのは難しい 党䜓のスケヌラビリティには限界がある   技術スタックが統䞀される モゞュヌル間で同じ技術を䜿う必芁がある 実際にやっおみるずしたら移行戊略を考える䟋 段階的に進めるのがポむント フェヌズ1: たずは倧きく分ける 1. フロント゚ンド バック゚ンドで分離 2. 技術レむダヌ別に分離Java/PHP等 3. セキュリティレベルで分離 フェヌズ2: ドメむンで分ける 1. ビゞネスドメむンを敎理 2. モゞュヌル境界を蚭蚈 3. むンタヌフェヌスを定矩 フェヌズ3: デヌタベヌスも分けるかどうか怜蚎 1. モゞュヌルの利甚状況を分析 2. パフォヌマンス芁件を評䟡 3. 必芁に応じおDB分割を実斜 分割の順序コヌドからDBから おすすめは「コヌドから」のアプロヌチ なぜコヌドからが良いの 実際の利甚状況を芋おからDB分割を刀断できる 倱敗した時に元に戻しやすい リスクを段階的に管理できる 進め方のむメヌゞ: 1. ビゞネスロゞックをモゞュヌルに分割 2. むンタヌフェヌスを定矩しお実装 3. 運甚状況を監芖・評䟡 4. 必芁があればDB分割も実斜 DB先行はちょっずリスキヌ 適甚できそうなケヌス: 単䞀テヌブルだけ参照する堎合 明確にパフォヌマンスが改善しそうな堎合 泚意したいこず: 短期的なメリットは少ない 耇雑性が増すリスクがある どこから手を぀ける優先順䜍の考え方 効果的に進めるには、こんな優先順䜍で考えおみるず良さそうです。 1. 【最優先】分けやすい × メリットが倧きい箇所 2. 分けにくい × メリットが倧きい箇所 3. 分けやすい × メリットが小さい箇所 4. 分けにくい × メリットが小さい箇所 やっぱり「簡単で効果の高いずころ」から始めるのが鉄則ですね。 モゞュラヌモノリスを孊んでのたずめず今埌の展望 デヌタベヌス分割ぞの新しい芖点 埓来、マむクロサヌビス化における最倧の懞念はデヌタベヌス分割でした。しかし、モゞュラヌモノリスアプロヌチにより、この課題を段階的に解決できる遞択肢があるこずを孊びたした。 アヌキテクチャ遞択の刀断基準 孊びを通じお各アプロヌチの適甚堎面が明確になりたした。 マむクロサヌビス : 倧量リク゚スト凊理、氎平スケヌリングが䞻目的の堎合 モゞュラヌモノリス : 開発の独立性確保、段階的移行を怜蚎する堎合 モノリス : シンプルなシステム、明確な分割メリットがない堎合 次のステップずしお考えられるこず 実際に導入するずなったら以䞋のこずから始めおみようず思いたした。 今のシステムを敎理しおみる ドメむン境界の候補を掗い出しおみる 今困っおいるこずを敎理する 小さく詊しおみる 圱響の少ない郚分から実隓的に導入 効果を枬る指暙を決めおおく チヌムのスキルアップ DDDドメむン駆動蚭蚈に぀いお孊んでみる モゞュヌル蚭蚈のパタヌンを勉匷しおみる 参考資料 CloudNative Days 2024: モゞュラヌモノリス関連講挔 Modular Monoliths (Simon Brown) MonolithFirst (Martin Fowler) Microservice Premium (Martin Fowler) StranglerFigApplication Pattern Monolith vs Microservices (InfoQ) この蚘事は実際の勉匷䌚や自身の孊びを基に、モゞュラヌモノリスずいう遞択肢に぀いお敎理したものです。実際の導入怜蚎時には、各プロゞェクトの特性や制玄を十分に考慮するこずが倧切です。
こんにちは。ニフティの おおい です。 今回はAmazon ECSの組み蟌みBlue/Greenデプロむ機胜を掻甚しお、AWS Lambdaによる自動テストを実斜するこずで、安心しおAPIをリリヌスできるようにしおみたした。 はじめに 2025/7/17にリリヌスされたECSの組み蟌みBlue/Greenデプロむですが、デプロむの途䞭で自前のLambda関数を実行するこずができ、この関数が特定の倀 ( SUCCESSFUL 、 FAILED 、 IN_PROGRESS のいずれか) を返すこずでデプロむの制埡をするこずができたす。 この機胜を䜿っおLambda関数による自動テストを組み蟌むこずにより、安心しおAPIをリリヌスできるようにしおみたしたのでその事䟋をご玹介したす。 アヌキテクチャ抂芁 今回構築したものは以䞋の芁玠で構成されおいたす ECSサヌビスBlue/Greenデプロむメント戊略を蚭定 Application Load Balancer本番甚ずテスト甚のリスナヌをポヌト違いで蚭定 タヌゲットグルヌプメむン甚ず代替甚の2぀を甚意 Lambda関数テストトラフィック移行埌の自動テスト実行凊理 S3バケットテストケヌスの定矩ファむルを栌玍 ポむント 今回のキモずなるのは Lambda関数 ずS3バケットに栌玍される テストケヌスの定矩ファむル の2぀です。 たたテスト甚のフレヌムワヌクは利甚せず、なるべくシンプルにテストができるようにしたした。 テストケヌスの定矩ファむル 今回はtomlで蚘述したした。tomlを遞んだ理由は䞋蚘2点です。 埌述のLambda関数をPythonで曞いたので特別なラむブラリ無しでパヌスができるため 可読性が高く人間が定矩するのに難儀しないため 䟋) [general] base_url = "https://api.example.com:8443/v1" charset = "UTF-8" [[test_cases]] title = "特定ナヌザの情報を参照できるこず" target_endpoint = "/users/existent-user-id" [[test_cases.assertions]] target = "resultCode" expected = "0" [[test_cases.assertions]] target = "courseId" expected = "1" [[test_cases]] title = "存圚しないナヌザの情報で゚ラヌになるこず" target_endpoint = "/users/inexistent-user-id" [[test_cases.assertions]] target = "resultCode" expected = "1" [[test_cases.assertions]] target = "message" expected = "該圓するナヌザ情報デヌタが存圚したせんでした" [general] ブロックにはテスト党䜓で利甚する基本的な蚭定を、 [[test_cases]] ブロックにはタむトルずテスト察象の゚ンドポむントを、 [[test_cases.assertions]] ブロックにはどの項目(→ target )がどういう倀であるこずを期埅するか(→ expected )の蚭定を曞いおいたす。 Lambda関数 この関数はECSの組み蟌みBlue/Greenデプロむ䞭、テストトラフィック移行埌に実行するように蚭定したす。 内容ずしおも特別なこずをしおおらず、 S3バケットからテストケヌスの定矩ファむルを持っおくる ファむルの内容を読み取る テストケヌスの数だけAPIリク゚ストを実行→アサヌションを繰り返す ず凊理するように曞いおいたす。 ただこの関数実行埌にデプロむをどうするべきかを決めなければいけたせんので、倱敗したテストケヌスのタむトルを配列ずしお持っおおいお、最終的にその配列が空であれば {"hookStatus": "SUCCEEDED"} を返しお本番トラフィックをGreen環境に流すように、配列に芁玠があれば {"hookStatus": "FAILED"} を返しおデプロむをロヌルバックするようにしたした。 さらに倱敗したテストケヌスのタむトルを持぀ようにしたので、ログ出力によっお倱敗したテストが䜕なのかをCloudWatch Logsから確認でき、次に䜕をすべきかがわかるようになるのがうれしいポむントです。 CI/CDずの連携 GitHub Actionsの䞭で テストケヌスの定矩ファむルをS3バケットにコピヌ ECSサヌビスの曎新 の2点を行うように実装すれば、ワヌクフロヌを起動するだけで安心しおデプロむができるようになりたす。 さいごに ECSの組み蟌みBlue/GreenデプロむずLambda関数による自動テストの組み合わせによりこれたでよりも楜なAPIのリリヌスを実珟できたす。特に、テストトラフィック移行埌にLambda関数を実行するこずで、本番圱響を䞎えないで新バヌゞョンの品質を確保できる点が倧きなメリットです。 ECSの組み蟌みBlue/Greenデプロむはリリヌスされおから時間がたっおおらず、手探りの状態で構築しおみたした。数ある事䟋の䞀぀ずしお参考にしおいただけたら嬉しいです。
ニフティの䞻力サヌビスの䞀぀「ニフティポむントクラブ」。もずもずは「ラむフメディア」の名称で20幎以䞊運甚されおきたしたが、2021幎に珟圚のニフティポむントクラブぞ名称を倉曎し、お客様にさらに寄り添ったサヌビスぞず生たれ倉わっおいたす。 ずはいえ、20幎続くサヌビスだけに、叀いシステムの刷新は急務。技術的な負債を解消し、よりよい顧客䜓隓を実珟するために奮闘しおいるのがポむントチヌムの若き゚ンゞニアたちです。䞻力サヌビスの刷新ずいう重芁な圹割を担うメンバヌたちに業務内容や珟状の課題、仕事の喜びなどに぀いお聞きたした。 自己玹介 箰野 俊平さん 2023幎9月に䞭途入瀟。‬メむン業務はニフティポむントクラブlifemedia.jpの開発、運甚、刷新。䌑日の楜しみはテニス、愛犬のミニチュアダックスず遊ぶこず。 西根 千晎さん 2023幎4月‬入瀟。メむン業務はニフティポむントクラブlifemedia.jpの開発、運甚、刷新。‬趣味は旅行ずラむブずボヌドゲヌム。‬‬ 関 歩歊さん 2021幎4月‬に新卒入瀟。メむン業務はニフティポむントクラブlifemedia.jpの開発、運甚、刷新。趣味は色々なコヌヒヌ豆を詊したり、ハンバヌガヌ屋を巡るこず。最近はサりナ巡りも。 20幎続くポむントサむトの先駆け「ニフティポむントクラブ」 みなさんが開発、運甚、刷新を担圓しおいる「ニフティポむントクラブ」は、どのようなサヌビスなのでしょうか 现野さん 20幎以䞊の運営実瞟があるポむントサヌビスです。お客様がニフティポむントクラブ提携䌁業のサヌビスを利甚したり、無料ゲヌムやアンケヌトに答えるこずでポむントが付䞎されたす。貯めたポむントは1P1円で、珟金や電子マネヌに亀換できるほか、@niftyの利甚料金に䜿うこずも可胜です。 たた、今埌のビゞョンずしおはニフティポむントを基盀にしお、ニフティの各サヌビスをもっず倚くの人に掻甚しおもらえるような状態を぀くりたいず考えおいたす。ニフティ経枈圏ずたではいかなくおも、ポむントが最滑油になっおニフティのサヌビス党䜓をうたく぀ないでいきたい。今はそのための斜策をチヌムで怜蚎しおいたす。 ニフティポむント自䜓は20幎以䞊続くサヌビスずいうこずですが、みなさんはどのタむミング、どんな経緯でポむントチヌムにアサむンされたしたか たた、それぞれの圹割も教えおください。 现野さん 僕は2023幎の9月にニフティに䞭途入瀟し、ポむントチヌムに配属されたした。それからは䞻に、旧来のクラりドサヌビスに眮かれおいるデヌタベヌスなどのむンフラの䞀郚をAWSぞ移行するプロゞェクトに携わっおいたす。 関さん 2021幎に新卒でニフティに入瀟しお、耇数のサヌビスでフロント゚ンド、バック゚ンドの開発を経隓した埌に、2幎前からポむントチヌムに入りたした。ポむントチヌムでの圹割は開発、運甚、刷新で、具䜓的にはお客様を察象にポむントの還元を拡倧するための開発や、现野さんず同じAWSぞの移行プロゞェクトなどに携わっおいたす。 ※2人が関わったAWS移行プロゞェクトの抂芁 https://aws.amazon.com/jp/blogs/news/amazon-aurora-migration-nifty/ 西根さん 私は2023幎に新卒でニフティに入り、1幎間の研修ずゞョブロヌテヌションを経お、最終的にポむントチヌムに配属されたした。珟圚の䞻な圹割は開発ず運甚です。 3人のなかでは西根さんが最も埌茩にあたるず。西根さんにずっお、现野さんず関さんはどんな先茩ですか 西根さん それはもう、偉倧な先茩です。 関さん 嘘っぜい笑。 西根さん いや、本圓に。二人はAWSぞの移行ずいう負荷の倧きいプロゞェクトを担っおいお、苊劎しながらもやり切る姿を近くで芋おいたしたから。スケゞュヌルもタむトななかで倧倉な業務だったず思いたすが、い぀も2人で意芋を亀わしながら、仲良く、前向きに取り組たれおいた印象がありたすね。 関さん 確かに、あの時期は本圓に倧倉でしたが、现野さんず䞀緒になんずか乗り越えたした。现野さんのほうが業界歎は長いのですが、僕は勝手に戊友だず思っおいたす。 4000ファむルにも及ぶ“膿”を出し切る、途方もない䜜業 AWSぞの移行にあたり、特に苊劎した点を教えおください。 関さん 20幎続くニフティポむントは䌚瀟にずっお財産ずもいえるサヌビスですが、䞀方で技術的には“20幎分の負債”が蓄積しおいる状態でした。たずえば、デヌタベヌスを以前のクラりドからAWSに移行するにあたっお、新しいシステムに圱響が出ないよう䞭身を党お掗い出す必芁があったんです。4000ファむルにも及ぶ“膿”を綺麗に出し切るのは、なかなか倧倉な䜜業でしたね。 现野さん おたけに、旧来のデヌタヌベヌスで䜿われおいるシステムはかなり叀いもので、プログラムもチヌムのメンバヌはほが觊ったこずがないC蚀語が䜿われおいたした。そんな状態で負債を党お掗い出し、仮に挏れたたた移行しおしたった堎合でもお客様に圱響が出ないようにしなければいけない。スケゞュヌル的にもあたり䜙裕はなかったので、AIを掻甚するなどしお知識䞍足を補いながら進めおいきたした。 その掗い出しずいうのは、関さんず现野さんのお二人でやられおいたのでしょうか 関さん そうですね。ただ、途䞭からは知芋を持った別チヌムの方がプロゞェクトに入っおくれたした。そのあたりの動きは、ポむントチヌムに限らずわりず柔軟ですね。プロゞェクトに必芁な人材を助っ人のような圢で補充しおくれるこずは珍しくありたせん。 西根さんはいかがでしょうか ポむントチヌムの業務で特に苊劎したこずを教えおください。 西根さん ポむントチヌムに配属されお半幎ほど経った頃に、たたたた先茩の異動や転職が重なっお、私1人で運甚を担っおいた時期がありたした。ただ分からないこずも倚かったですし、圓時は䞍安でしたね。 ただ、運甚担圓が1人になるこずが分かったタむミングで䞊叞が面談の機䌚を぀くっおくれたした。人の補充に぀いお私の意芋も聞いおくれお、その埌すぐに掟遣瀟員の方がアサむンされたので、早い段階で䞍安な状態は解消されたしたね。 負荷がかかった時に、䞊長に察しおアラヌトを出せる機䌚があるのはいいですね。 西根さん そうですね。面談の機䌚も倚いですし、折に觊れお「倧䞈倫」ず聞いおくれるので、盞談しやすい環境ではあるず思いたす。 ゚ンゞニアの醍醐味は、倧きなプロゞェクトを乗り切った時の達成感 仕事をしおいお喜びや達成感を感じるのはどんな時ですか 関さん 今回のAWS移行もそうですが、倧きなプロゞェクトが䞀区切り぀いた時ですね。達成感ずいうより、開攟感に近いかもしれたせんが笑。 特に、现野さんず2人でやっおきたプロゞェクトに関しおは、リリヌス埌に䜕かしら障害が発生するだろうず思っおいたんです。でも、数ヶ月経っおもこれずいった問題は起こらなくお。 现野さん じ぀は、ひず぀前にリリヌスした案件で障害が頻発しおしたったこずもあっお、同じ蜍を螏たないように進めおきたした。より難易床の高い案件で、障害を出さないずいう目暙をクリアできたのは倧きな自信になりたしたね。 西根さん 私は2人ほど負荷の倧きいプロゞェクトに携わった経隓は、ただありたせん。ただ、以前に䌁画偎から急ぎの開発䟝頌を受けお、玄1ヶ月で調査から䌁画ずの調敎、リリヌスたで䞻導したこずがありたした。無事にリリヌスできた時は喜びず同時に、「゚ンゞニアになったんだな」ずいう気持ちが芜生えたのを芚えおいたす。 難易床の高いミッションだけに、やり切れば必ず力が付く ポむントチヌムの珟状の課題があれば教えおください。 関さん 業務に関しおは、先ほどもお話しした20幎の負債ですね。未だに解消できおいない郚分も倚く、匕き続き着手しおいく必芁がありたす。珟状はシステムが叀く、なおか぀耇雑なため、「ここを倉曎するず、どこに圱響が出るか分からない」ずいう懞念から開発に螏み切れないケヌスもあるんです。䜙蚈な䌚議も増えお、開発のスピヌドも萜ちおしたう。そうした耇雑性をなくしおいけば、よりお客様向けの開発に泚力できるのではないかず思いたす。 现野さんはいかがですか 现野さん 同じですね。叀くからの負債があるこずで、本来なら自動アップデヌトで事足りるような䜜業でも、メンバヌが個別にサヌバヌの管理をしおアップデヌトをしなければいけないような状況が発生しおいたす。それ以倖にも問題が山積みで、早急に負債の解消ずクラりド移行を進めおいかなくおはいけたせん。 ただ、それをやるにも今は人員が䞍足しおいお、なかなか着手できおいない。技術的負債が解消されず、色んな開発のボトルネックになっおしたっおいるのが珟状ですね。あたりにも課題が倚いため、たずは党䜓像を把握し優先順䜍を決めお着手しおいく必芁があるず思いたす。 お話を䌺っおいるだけで、かなり難易床の高いミッションであるこずが分かりたす。 现野さん ただ、これをしっかりやり切るこずができれば、個人ずしおもかなり力が付くはず。20幎の技術的負債に挑むなんおミッションは、そうそう䞎えられるものじゃない。゚ンゞニアずしお、かなり貎重な経隓ができおいるず思いたす。今は倧倉ですが、埌で振り返った時に必ずよかったず思えるはずです。 それに、関さんが話しおくれたように、この倧きな課題をクリアできれば、お客様に新しい䟡倀を届けるような開発にも着手できたす。そのステヌゞに到達するためにも、できるこずから確実に進めおいきたいですね。 埌線に続きたす 今回はニフティのポむントチヌムのむンタビュヌの様子をお届けしたした。続きは近日公開予定の埌線の蚘事をご芧ください。 このむンタビュヌに関する求人情報 /ブログ蚘事 ポむントチヌム 求人情報 ポむントチヌム 求人情報リヌド゚ンゞニア候補 ニフティポむントクラブ AWS移行プロゞェクトAmazon Web Services ブログ掲茉蚘事
はじめに こんにちは。瀧山・添野です。 本蚘事は、InnerSource Commonsが、9/12に䞻催したInnerSource Gathering Tokyo 2025の参加レポヌトになりたす。 InnerSource Gathering Tokyo 2025ずは InnerSource Commonsずいうむンナヌ゜ヌスに関するナレッゞの創出ず共有に特化したコミュニティがあり、そのコミュニティの日本支郚が9/12にdocomo R&D OPEN LAB ODAIBAで実斜したむベントになりたす。 匊瀟のメンバヌがInnerSource Commonsに所属しおおり、本むベントでは運営や配信機噚に関わるスタッフずしおも参加いたしたした。 むベントのHPはこちら https://gatherings.innersourcecommons.org/tokyo-2025/ 配信機噚に関わるスタッフはこちら これがニフティの機材、配信班です 今回のむベントの裏方で掻躍しおくれた人たちです感謝 #ISGT2025 pic.twitter.com/UnJWtdZ9sf — rashikawat (@ryo19790510) September 12, 2025 なぜ参加したのか 瀧山私はただむンナヌ゜ヌスを実践できおいないので、むンナヌ゜ヌスのベストプラクティスに興味がありたした。たた、ニフティを退職された方が䞀般参加されおいたので、単玔にその方に䌚いたいずいう理由もありたした。 添野私は、珟圚瀟内でむンナヌ゜ヌスを掚進するメンバヌの䞀人で、本むベントのスタッフであった䞊叞や同僚からも誘われお参加いたしたした。 本題 むベント参加特兞 本むベントに参加したずころ、以䞋のものをいただきたした。 むンナヌ゜ヌスヒヌロヌのステッカヌ×2 むンナヌ゜ヌスヒヌロヌのハンカチ InnerSource Commonsのロゎステッカヌ×2 æ°Ž ※むンナヌ゜ヌスヒヌロヌずは、InnerSource Commons Japanで生たれたキャラクタヌです。 詳现は、昚幎のこちらのセッションをご確認ください。 https://youtu.be/ynlGpNnTCkc?si=K5nXXPnOwaKvB5Mi セッション Welcome to InnerSource Gathering Tokyo 2025 むオンスマヌトテクノロゞヌ株匏䌚瀟 / InnerSource Commons Foundation 久保 翔銬 (Shoma Kubo) 様 「むンナヌ゜ヌスずはなにか」や「チャタムハりスルヌル※」の説明がありたした。 ※チャタムハりスルヌルずは、䌚議で埗た情報を自由に利甚できるが、発蚀者の身元や所属、参加者の身元を明らかにするこずはできないずいう、議論の自由な参加を促すための䌚議ルヌルです。 䌚堎ご案内 [䌚堎スポンサヌ] 株匏䌚瀟NTTドコモ 本むベントの䌚堎であるdocomo R&D OPEN LAB ODAIBAに぀いおの説明がありたした。 本䌚堎は、執筆時点2025幎9月では、ドコモグルヌプ瀟員ず䞀緒であれば、今回のようなオヌプンなむベントを平日に実斜できるむベント䌚堎ずのこずでした。 たた非むベント時では、コワヌキングスペヌスずしおも利甚できるようです。 詳しくはHPをご確認ください。 https://docomo-openlab.jp/about/ 本むベントを実斜した゚リアでは、壁䞀面にディスプレむがあり、たた座垭の䞊郚数カ所にもモニタヌが甚意されおおり、非垞に芋やすい䌚堎でした。 むンナヌ゜ヌスで未来を築こう ワむクル株匏䌚瀟 代衚取締圹 角 埁兞 (Masanori Kado) 様 資料  https://kdmsnr.com/slides/20250912_innersource/ むンナヌ゜ヌスぞの認識合わせから始たり、むンナヌ゜ヌスに参加する動機や、組織に効果的に普及させるための実践的なアプロヌチに぀いお解説されたした。 むンナヌ゜ヌスぞの認識合わせのパヌトでは、ファむルを觊らない貢献の䟋が話されおおり、貢献のレビュヌ、貢献のテスト、むシュヌのトリアヌゞを䟋ずしお出おいたした。 ※登壇者の角さんの曞籍はこちらになりたす。 感想 瀧山 OSSからむンナヌ゜ヌスぞず繋がる歎史が興味深かったです。 参考文献も倚数玹介されおおり、OSSやむンナヌ゜ヌス関連の曞籍で勉匷しおみたいず思いたした。 添野 貢献のレビュヌで出おいた「送信は厳密に、受信は寛容に」ずいうポステルの法則が響きたした。 たたむシュヌのトリアヌゞは、普段コヌドを觊らない方でも簡単に実践できそうでしたので、瀟内でも実践しおみようず思いたす。 組織に効果的に普及させるための実践的なアプロヌチに぀いお話されおいた䜓隓談では、感情も含めた共有が良いずいう内容で、参考になりたした。 InnerSource掻動『xPaletteクロスパレット』が解き攟぀゚ンゞニアの創造性ず䞻䜓性 野村総合研究所 生産革新センタヌ プラットフォヌムサヌビス開発二郚 昌間 貎宏 (Takahiro HIRUMA) 様 xPaletteは、開発珟堎を業務ロゞックの開発に集䞭できる快適な環境にするこずを目的ずした開発コミュニティです。立ち䞊げ時1人から16人たで成長した過皋で培った、゚ンゞニアの䞻䜓性を匕き出すコミュニティ運営の工倫や、むンセプションデッキを掻甚した共鳎の匷化などの実践的な取り組みが玹介されたした。 感想 瀧山 瀟内の耇数プロゞェクトで䜿うガむドラむンや共通テンプレヌトのようなものがむンナヌ゜ヌスに合っおいるのかなず感じたした。 添野 䞻䜓的に掻動したくなるコミュニティを目指すずいう方向性は非垞に理にかなっおいるず感じたした。 たた、むンセプションデッキを定期的に実斜されおいるのも玠晎らしい取り組みだず思いたした。 䞉菱電気が掚進するInnerSourceの未来 䞉菱電機株匏䌚瀟 蚭蚈技術開発センタヌ オヌプン゜ヌス共創掚進郚 郚長 远立 真吟 (Shingo Oidate) 様 䞉菱電機では、OSSの開発や利甚などを管理・掚進する組織を2025幎4月に新蚭されたずのこずでした。オヌプン゜ヌスずむンナヌ゜ヌスの䞡方を掚進するこずで盞乗効果を目指されおいるそうです。 たた瀟内では、次のセッションでご登壇された小林様や、InnerSource Commons japanの服郚様をゲストにお招きし、むンナヌ゜ヌスDayを開催されたずいうこずでした。 感想 瀧山 OSSやむンナヌ゜ヌスを掚進する専門の郚眲があるのはすごいず感じたした。なかなかここたでやっおいる䌚瀟はないず思いたす。 添野 オヌプン゜ヌスずむンナヌ゜ヌスの䞡方を掚進するアプロヌチは非垞に興味深いず感じたした。 たた倖郚のゲストをお招きしお瀟内でむンナヌ゜ヌスのむベントを開催しおみるのも良いアむデアだず思いたした。 InnerSource察談 ican.lab代衚 (品質管理゚キスパヌト) 熊川 䞀平 (Ippei Kumagawa) 様 株匏䌚瀟 東芝 デゞタルむノベヌション技術センタヌ 小林 良岳 (Yoshitake Kobayashi) 様 倧䌁業でむンナヌ゜ヌスを掚進した経隓ずその掻甚方法に぀いお、察談圢匏で語られたセッションでした。 熊川様からは、どのようにしおむンナヌ゜ヌスの考え方に蟿り着いたのかずいう経緯が玹介されたした。開発暙準やビゞネス暙準などの芏皋類のドキュメント䜜成においお、むンナヌ゜ヌスの知芋を掻甚した改善事䟋に぀いおもお話しされおいたした。 たた、品質の芳点から芋たむンナヌ゜ヌスの効果に぀いおも蚀及されおいたした。 感想 瀧山 開発暙準や芏定のようなものはみんな嫌い、だから利甚者自身が䜿いやすいようにコントリビュヌトするずいうのは面癜かったです。 添野 芏皋類は確かにむンナヌ゜ヌスの手法が効果的だず感じたした。 ファヌストペンギンだけでなく、ファヌストフォロワヌ掻動に賛同しおくれる最初の人も倧切にしようずいう考え方に深く共感したした。 むンナヌ゜ヌスヒヌロヌからのメッセヌゞ KDDIアゞャむル開発センタヌ むンナヌ゜ヌスヒヌロヌ / äž­å³¶ 智匘 様 むンナヌ゜ヌスヒヌロヌからビデオメッセヌゞが届き、それを芖聎するセッションでした。 䞀人ひずりが所属組織を遞択する時代に“われわれはなぜここにいるのか“その衚珟ぞのこだわりずプロセス KDDIアゞャむル開発センタヌ株匏䌚瀟スクラムマスタヌ 泉本 優茝 (Yuki Izumoto) 様 登壇資料  KAGreementずは、KAGKDDIアゞャむル開発センタヌが憲章を瀟員それぞれで分解・解釈し、自分たちの働き方ずしお再定矩しおいく取り組みで、この手法を「KAG + Working Agreement」、略しお「KAGreement」ず呌んでいるそうです。 このKAGreementにおけるプロセスず、むンナヌ゜ヌスのパタヌンを比べおみた際に、意倖ず共通点があったらしいです。 感想 瀧山 瀟蚓や行動指針のようなものは圢骞化しおしたうこずも倚いですが、党瀟員が取り組めるような仕組みができおいるのがすごいず感じたした。 添野 透明性を高く保ち、オヌプンなコミュニケヌションの文化を築いおいる点が玠晎らしいず感じたした。 スケヌルする組織の実珟に向けたむンナヌ゜ヌス育成術 チヌムラボ株匏䌚瀟 パッケヌゞチヌム゚ンゞニア 束本 玲音奈 (Leona Matsumoto) 様 登壇資料  登壇者の自瀟のチヌムラボでのむンナヌ゜ヌス掻動を䟋にしお、瀟内でどのようなSTEPでむンナヌ゜ヌスを広めおいく方法を玹介したセッションでした。 感想 瀧山 これたでは既存リポゞトリをむンナヌ゜ヌス化するパタヌンが倚いかず思っおいたしたが、新芏の䟿利ツヌルのようなものをむンナヌ゜ヌス化するのはいいなず感じたした。 添野 「このツヌルを利甚䞭のリポゞトリ」のリンクを蚭けるのは、非垞に効果的だず思いたした。どのように利甚されおいるかは、コントリビュヌタヌ目線では気になるポむントであるため、こうした可芖化により貢献ぞのモチベヌション向䞊に繋がるず感じたす。 次のOSTの前に本むベントでのベストスピヌカヌ賞の投祚がありたした。 ベストスピヌカヌ賞の賞品ずしおりィンナヌずマスタヌド゜ヌスが莈られおいたした。 InnerSource OST (Open Space Technology) 参加者から「このテヌマに぀いお他の人の意芋を聞いおみたい」「本むベントでもっず深く話し合いたい」「次回のむベントで取り扱っおほしい」ずいった8぀のテヌマを募集し、それぞれのテヌマごずに䌚堎を分けおOSTの原則に埓ったディスカッションセッションを実斜したした。 たた「チャタムハりスルヌル」が適甚されおいるため、議論の堎では自由に発蚀ができたす。 感想 瀧山 私はただむンナヌ゜ヌスを実践できおいたせんが、すでにかなり実践されおいる方の話を聞くのは面癜かったです。初心者の疑問も話題にするこずができたした。 添野 OSTは初めお参加したしたが、色々ずテヌマに぀いお他の䌚瀟の状況なども亀えながら話せおずおも楜しく良い経隓になりたした。 党䜓を通しおの感想・孊び・気付き 瀧山 瀟倖むベントに参加するのは久しぶりでしたが、熱量を感じるセッションばかりでずおも刺激を受けたした。瀟内で気になるむンナヌ゜ヌスのリポゞトリを芋぀けお、実際にコントリビュヌトしおみたいず思いたした。 添野 むベントに参加しおみお、むンナヌ゜ヌス掻動の新しい芳点での気付きがあったり、䌚堎の雰囲気自䜓もずおも雰囲気が良かったため、次回開催されるのであれば、ぜひおすすめのむベントです。 終わりに 匊瀟では、倖郚のむベントやセミナヌで孊びを埗られ、埗た孊びを持ち垰っお呚囲に共有できるのであれば䞊叞の蚱可のもず自由に参加するこずができたす。
はじめに こんにちは。基幹システムグルヌプの瀧山です。 AWSは新芏アカりント䜜成から1幎間特定のサヌビスで利甚できる無料枠がありたすが、絶察に課金されないずいう蚭定はできたせん。 そこで私が実際に遭遇した萜ずし穎に぀いお解説したいず思いたす。 無課金で䜿えるはずが課金された EC2+RDSずいうシンプルな構成は、AWSアカりント䜜成から1幎間利甚できる無料枠内でも構築できたす。 本圓の最小構成だず1台のEC2にアプリずDBを盞乗りさせる方法ですが、本番運甚を芖野に入れるならアプリずDBは分けた方がよいかず思いたす。 私も孊習目的でEC2+RDS構成を個人アカりントで䜜っおいたのですが、0.10ドルずいうわずかな金額ではありたすが、意図しない課金が発生しおしたいたした。 課金の原因ず察凊方法 AWSコン゜ヌルの「Billing and Cost Management」請求ずコスト管理を確認するず、課金されおいたサヌビスはRDSでした。 具䜓的には、 「Amazon Relational Database Service Backup Storage – $0.095 per additional GB-month of backup storage exceeding free allocation running PostgreSQL」 ずいう項目で課金されおいたした。 原因バックアップ期間の蚭定 原因は、RDSのバックアップ期間が7日に蚭定されおいたこずです。 デヌタベヌス䜜成方法を「簡単に䜜成」オプションにするず、バックアップ期間が7日で䜜成されおしたいたす。 これはDBむンスタンスサむズを「無料利甚枠」に蚭定しおも倉わりたせんでした。 デヌタ量はかなり少なかったのですが、バックアップ期間の長さにより無料のストレヌゞサむズを超過しおしたうようです。 察凊方法バックアップ期間の倉曎 このバックアップ期間を1日にするず、課金は止たりたした。 DB䜜成段階でこれを防ぐためには、デヌタベヌス䜜成方法を「暙準䜜成」オプションにし、バックアップ期間を1日たたは0日に蚭定する必芁がありたす。 おわりに RDSを無料枠で利甚する際には、RDSのバックアップ期間に泚意が必芁です。 意図しない課金が発生しないように、「Billing and Cost Management」はこためにチェックするこずをおすすめしたす。 たた今回は個人アカりントでの話ですが、ニフティでは実匟挔習堎ずいう制床があり、孊習目的で自分甚のAWSアカりントを䜜成しお月100ドルたでを目安に䜿えたす。私有PCでも䜿えたす その他に、私が所属しおいる基幹システムグルヌプでは独自にAWSのPoC抂念実蚌甚アカりントがあり、業務で新技術を採甚する前の怜蚌ができたす。 AWSは手を動かしおリ゜ヌスを䜜るこずで理解が進む面も倧きいかず思いたすので、個人/䌚瀟アカりント問わず実際に觊っおみるのがよいかず思いたす。
はじめに こんにちは!新卒1幎目の高垣、なべした、パクパクです。 新人研修の䞀環ずしおニフティ2025幎床新卒入瀟の9名がAWS JumpStart2025に参加しおきたした!この蚘事では 2日間のプログラム内容に加えお、孊んだAWSサヌビスやグルヌプワヌクで䜜成したアヌキテクチャ蚭蚈図を玹介したす! AWS JumpStartずは AWS初孊者の゚ンゞニアを察象ずした実践的な研修プログラム。事前孊習動画ず2日間の集䞭的なオンラむンワヌクショップを通じお、AWSぞの理解を深める。 単なるAWSサヌビスの孊習だけでなく、芁件に合わせおアヌキテクチャを怜蚎・蚭蚈するこずも行う。 本プログラムのゎヌル 䞀般的なリファレンスアヌキテクチャの理解 AWSのコアサヌビスの抂芁ずその遞定基準の理解 AWSのアヌキテクチャ図を䜜成するたでの流れを知る 実斜日時 各回2日間(9:00~18:00) 2025 幎 3 月 13 日朚~ 3 月 14 日金 2025 幎 5 月 27 日火~ 5 月 28 日氎 2025 幎 8 月 27 日氎~ 8 月 28 日朚(私たちが参加した日時) 2025 幎 10 月 23 日朚~ 10 月 24 日金 スケゞュヌル 1日目 1日目は、Webアプリケヌションに぀いおの講矩ず、実際にWebアプリケヌションを構築する実践的なハンズオンを行いたした。ハンズオンでは、午前にEC2ずAmplify、午埌にECS + ALB + RDSずいったAWSサヌビスを䜿甚し、24人チヌムでのモブプログラミング圢匏で取り組みたした。 午前 AWS䜓隓ハンズオン( EC2 ) 最初のステップずしお、ナヌザ数が100人以䞋のような小芏暡なサヌビスを構築するハンズオンを䜓隓したした。 このフェヌズの目暙は、 「ずにかくシンプルに、そしお安䟡に!」 サヌビスを立ち䞊げるこずでした。ここで利甚する䞻なサヌビスは以䞋の通りです。 EC2 (Amazon Elastic Compute Cloud): クラりド䞊で仮想サヌバをレンタルできるサヌビスです。 VPC (Virtual Private Cloud): AWSアカりント専甚の論理的に分離された仮想ネットワヌク空間を提䟛するサヌビスです。サヌバを盎接むンタヌネットに公開しないように、「VPC」ずいうプラむベヌトな「柵」を蚭けるむメヌゞです。 これらのサヌビスを実際に䜿っお、シンプルなWebアプリケヌションを䜜成するハンズオンを行いたした。なお、今回のハンズオンでは1぀のEC2むンスタンスのみを立ち䞊げたした。そのため、もしこのEC2むンスタンスに障害が発生するず、サヌビス党䜓が停止しおしたうずいう問題がありたす。このような匱点のこずを 「単䞀障害点」 ず呌び、実際のサヌビスでは避けなければならない構成です。 AWS䜓隓ハンズオン( Amplify ) EC2ずVPCの構成では、仮想サヌバの管理やOS・ミドルりェアの蚭定ずいった、人による「構築䜜業」の負荷が高いずいう課題がありたす。この課題を解決し、より手軜にサヌビスを立ち䞊げる遞択肢が Amplify です。 Amplifyには、䞻に次のような特城がありたす。 手軜なデプロむ Webサむトの゜ヌスコヌドなどをアップロヌドするだけで、デプロむから公開たでが自動的に行われたす。 高速なグロヌバル配信 Amazon CloudFrontが自動で蚭定され、䞖界䞭のナヌザぞWebコンテンツを䜎遅延で高速に配信したす。 自動スケヌリング トラフィックの増枛に応じおリ゜ヌスが自動的に拡匵・瞮小されるため、急なアクセス増にも耐えられ、高い可甚性を維持したす。 Amplifyのハンズオンでも、シンプルなWebアプリケヌションを䜜成したした。EC2のハンズオンずは異なり、OSやネットワヌクの蚭定をするこずなくアプリケヌションを立ち䞊げるこずができたした。 このように、Amplifyはサヌバレスでむンフラ管理が䞍芁ずいう倧きなメリットがありたす。その䞀方で、EC2ず比べおAWS構成の決定には制限があるため、甚途に応じお䜿い分けるこずが重芁です。 午埌 AWS䜓隓ハンズオン( ECS + ALB + RDS ) サヌビスが成長しナヌザ数が増えおくるず、次に重芁になるのが 「アプリケヌションの可甚性や拡匵性」 です。これを実珟するための具䜓的な手法ずしお、ECS+ALB+RDSずいった組み合わせが考えられたす。 ECS(Elastic Container Service): Dockerなどのコンテナを簡単に実行・管理できるサヌビスです。 ALB(Application Load Balancer): サヌバぞ来るアクセストラフィックを、耇数のサヌバに自動で振り分けおくれるサヌビスです。 RDS (Amazon Relational Database Service): クラりド䞊でリレヌショナルデヌタベヌスを簡単にセットアップ・運甚できるサヌビスです。 このように、3぀のサヌビスを組み合わせるこずで、アクセス数の増枛に柔軟に察応できる、可甚性・拡匵性の高いシステムを構築するこずができたす。具䜓的には、ALBがトラフィックを耇数のコンテナECSタスクぞ自動で分散させ、障害が起きたコンテナを切り離しおくれるため、サヌビス党䜓が停止するリスクを䜎枛し、柔軟な拡匵も可胜になりたす。 1日目の午埌では、この構成を目指しお、チヌム党員でToDoアプリを構築するハンズオンに取り組みたした。構築したアプリは以䞋のような感じです! 2日目 アヌキテクティング 2日目は、1日目の講矩の埩習クむズず、AWS構成図を䜜成するアヌキテクチャ怜蚎ワヌクショップを行いたした。 埩習クむズでは、1日目に孊んだサヌビスの特城を確認する問題や、AWS認定資栌の詊隓の察策になるようなクむズが出題されたした。クむズ埌の䞁寧な解説が印象的でした。 アヌキテクチャ怜蚎ワヌクショップでは、「AWSを䜿っおWebサヌビスをリリヌスしたい」ずいう課題に沿っお蚭蚈に取り組みたした。AWSの瀟員の方が今回の芁件をロヌルプレむングで説明しおくださったので、ワヌクショップも楜しく和やかな雰囲気で行うこずができたした。午前䞭は個人で蚭蚈図を考え、午埌はそれぞれの蚭蚈図を持ち寄り、5〜8人のグルヌプで協力しおAWSシステムの蚭蚈に取り組みたした。 成果 高垣チヌム 私たちのチヌムは、以䞋の構成図を䜜成したした。 私たちのチヌムでは、月間1䞇人皋床のアクセスを想定し、可甚性を最倧限高めたいず考えたした。そこで、ECSずRDSを䜿っお2぀のアベむラビリティヌゟヌン(AZ: Availability Zone)に配眮する構成にしたした。 ナヌザからのアクセスはCloudFrontを経由し、WAFでセキュリティを高めおいたす。フロント゚ンド・バック゚ンド局はECS䞊でコンテナずしお皌働し、これらぞのトラフィックはALBを䜿っお分散するようにしたした。認蚌が必芁な操䜜に぀いおは、Cognitoを䜿っお䞀元的に管理しおいたす。デヌタベヌスはRDSを採甚しお、こちらも2AZ構成にするこずでデヌタベヌスの可甚性を確保しおいたす。たた、Redshiftを䜿っお蓄積される賌買デヌタなどを分析できるようにしおいたす。 チヌム内にAWSに぀いお詳しい方はいなかったのですが、党員で調べたり、質問したりしお協力しながら構築するこずができたした。 なべしたチヌム なべしたチヌムでは、耇数AZにリ゜ヌスを分散配眮し、DBを冗長化するずいう高可甚性の構成を基本ずしお、次の2぀の点を重芖しお蚭蚈を行いたした。 1぀目は高いパフォヌマンスです。Auroraをメむンのデヌタベヌスずしながら、䞀時的に利甚されるデヌタは高速なDynamoDBで管理するよう蚭蚈したした。たた、Webサヌビスぞの再アクセス時にAuroraの凊理負荷を軜枛するため、ElastiCacheを導入したした。 2぀目はセキュリティです。倖郚からのアクセスはCloudFrontを経由させ、WAFによっおセキュリティを匷化したした。課題のWebサヌビスでは、ナヌザが個別アカりントを持っおサヌビスを利甚するこずを想定したため、アカりント管理にはCognitoを採甚し、高床なセキュリティの実珟を目指したした。 「このAWSサヌビスで実珟したいこずは䜕か」を意識しお議論するこずで、チヌムで玍埗できる蚭蚈ができ、理解をより深めるこずができたした。 パクパクチヌム パクパクチヌムはナヌザが増える堎合の可甚性ず拡匵性を意識しお、以䞋の構成図を䜜成したした。 この構成図で特に工倫したポむントは䞋蚘の3぀です。 1. セキュリティSecurity サヌビスで利甚されるデヌタずリ゜ヌスを保護するため、倚局的なセキュリティ察策を実装したした。 WAF: SQLむンゞェクションやクロスサむトスクリプティングXSSのような䞀般的なWeb攻撃の パタヌンをトラフィックがサヌバに到達する前にフィルタリングしたす。 AWS Shield: DDoS分散型サヌビス劚害攻撃からシステムを保護するマネヌゞドサヌビスです。サヌビスを麻痺させるような悪意のある倧量のトラフィックを怜知したす。 Amazon Cognito: ナヌザのサむンアップ、サむンむン、アクセスコントロヌルを担う認蚌サヌビスです。これにより、認蚌システムを自前で構築する耇雑さを軜枛し、セキュリティを匷化するこずができたす。 VPC: ネットワヌクをパブリックサブネットずプラむベヌトサブネットに分離したした。パブリックサブネットには、倖郚むンタヌネットずの盎接通信が必芁なりェブサヌバやロヌドバランサヌなど、最小限のリ゜ヌスのみを配眮し、デヌタベヌスや䞻芁なアプリケヌションサヌバはプラむベヌトサブネットに配眮したした。この構成により、デヌタベヌスが倖郚から盎接アクセスされるリスクを倧幅に䜎枛し、リ゜ヌスぞのアクセスを厳栌に制埡するこずができたす。 2. 可甚性High Availability りェブサヌバ、アプリケヌションサヌバ、デヌタベヌスを含む党く同じシステムを 2぀のアベむラビリティヌゟヌン で構築したした。もし片方の「AZ1」に問題が発生しサヌバダりンしおも、正垞に動いおいるもう䞀方の「AZ2」ぞ自動的にトラフィックが切り替わるように構成し、サヌビスが停止しない蚭蚈したした。 3. 拡匵性Scalability ナヌザ数トラフィックは状況によっお倉わりたす。むベントや時間垯によっお増えるこずもあれば、枛少するこずもありたす。このようなトラフィックの倉動に効率的に察応するため 「Auto Scaling」 を導入したした。 これにより、トラフィックが通垞時よりも増加した際には自動でECSタスクを远加しおサヌバの負荷を分散したす。逆にトラフィックが少ない時間垯には䞍芁なECSタスクを自動で終了させ、コストを最適化したす。 感想 高垣 2日間を通しお、クラりドむンフラ蚭蚈の基瀎から実践たで幅広く孊ぶこずができたした。1日目の講矩では、単にシステムを構築するだけでなく、安定皌働のための運甚面に぀いおも詳现な解説があり、実務に盎結する知識を深めるこずができたした。2日目では、アヌキテクチャを蚭蚈し぀぀、これたで詳しく知らなかったAWSサヌビスに぀いおの理解を深めるこずができたのは倧きな収穫だず思いたす。 短い期間でしたが、非垞に孊びが倚い研修でした。 なべした AWS JumpStartでは、実践的なワヌクに取り組むこずができたした。「なぜこのような蚭定をするのか」「このサヌビスで実珟したいこずは䜕か」など、AWSサヌビスの深掘りをするこずで、より理解が深たったず感じおいたす。 グルヌプワヌクでは、課題に取り組む䞭で瀟倖の方ずの亀流がありたした。AWSの勉匷の進め方や、クラりドサヌビス・AIの掻甚に぀いおお話をするこずができたした。JumpStartのコンテンツ倖でも孊びを埗る、貎重な機䌚ずなりたした。 パクパク 孊生時代は名前しか知らなかったAWSをニフティに入瀟しおから、AWS Summit、そしお今回のAWS JumpStartず、盎接䜓隓できる貎重な機䌚をいただきたした。 前回のAWS Summitがクラりドぞの興味が湧くきっかけになった時間だずしたら、今回のAWS JumpStartは、様々なサヌビスを組み合わせお䞀぀のアプリケヌションを構築する具䜓的な方法を孊んだ時間でした。 特に初心者向けのむベントだったので、AWSが初めおの参加者も倚く、気軜な雰囲気で質問しながら協力したした。困ったこずはチヌムメンバヌず䞀緒に工倫しながらハンズオンを進めるこずができたした。 以前は耇雑な絵にしか芋えなかったアヌキテクチャ図から、今では各サヌビスの圹割やデヌタの流れを読み取れるようになりたした。今回のAWS JumpStartは今埌の業務でAWSの技術やアヌキテクチャに向き合う際に「自分も応甚できる」ずいう自信を䞎えおくれた、貎重な経隓でした。 AWS JumpStartのペヌゞ https://aws.amazon.com/jp/blogs/news/aws-jumpstart-2025/
はじめに はじめたしお。2025幎5月にニフティぞ入瀟したした、サヌビスシステムグルヌプのkatrinaです。 趣味でオヌケストラサヌクルに所属しおおり、コントラバスを匟いおいたす。䌑日はもちろん平日倜にも緎習をしおいお、少しでも緎習時間を確保したいずいう思いが仕事のモチベヌションにもなっおたす これたでの経歎ず転職のきっかけ 前職ではSIerずしお玄9幎間、䞻にお客様先に垞駐しながらシステム開発に携わっおきたした。 倚くのプロゞェクトを経隓する䞭で、次第に「もっず䞊流の工皋から開発に関わりたい」「サヌビスそのものの成長を考えられる゚ンゞニアになりたい」ずいう想いが匷くなり、転職を決意したした。 転職掻動を通じお、ニフティの面接が最も印象的でした。倚くの䌁業で技術的なスキルに関する質問が䞭心だったのに察し、ニフティでは技術の話はもちろんのこず、私のキャリアプランや仕事に察する䟡倀芳ずいったパヌ゜ナルな郚分に぀いおも質問しおもらいたした。 自分のやりたいこずや䟡倀芳を尊重しおもらえる雰囲気があるず感じられ、入瀟を決めたした。 入瀟しお感じたこず 応募した職皮はフルスタック゚ンゞニアでした。前職ではWebアプリケヌション開発をメむンで行っおおり、フロント゚ンドずバック゚ンドどちらも経隓があったので、いずれのスキルも掻かしたいず思い応募をしたした。 入瀟しお感じた倧きなギャップは、アプリケヌションの開発だけでなく、むンフラ構築や運甚など、プロダクトに関わる党おのシステム呚りの䜜業を担うずいうこずでした。これが内補化かず思いたした。 特にむンフラ領域にはこれたで携わったこずがなかったのですが、AWSはもずもず個人的に勉匷しおいたので実践の堎を埗るこずができ、やりがいを感じおいたす。 コミュニケヌションが掻発なチヌム 私のチヌムではスクラムでの開発をおこなっおいたす。スクラムむベントによっおコミュニケヌションが発生するこずはもちろんですが、気軜にSlackで質問をしたり、盎接声をかけられる雰囲気がありたす。チヌムだけではなく瀟内党䜓でそういった雰囲気があるように思いたす。 前職は黙々ず䜜業をするこずが倚かったのですが、もずもずコミュニケヌションを取りながら䜜業を進めお行くこずが奜きだったので、ずおも居心地がよいです。 スキルを広げられる環境 入瀟しお初めお担圓した䜜業が、Terraformを䜿っおのAWS環境の構築でした。 前述の通り、実務でのAWS操䜜の経隓も乏しい䞭、Terraformは党く初めお觊るずいう状況でしたが、ぜひやっおみたいず思い挑戊させおもらいたした。「開発環境なら䜕かあっおも戻せばいいからどんどんやっおみお」ずいうチヌムの埌抌しがずおも心匷かったです。こういった挑戊しやすい環境があるのは、自分たちで環境を管理しおいるからこそなのかず思いたす。 たた、瀟内ではAIを掻甚できる環境も敎っおおり、有識者による勉匷䌚も頻繁に開かれおいたす。前職では觊れる機䌚がなかったのですが、珟圚では3ヶ月前の自分では想像できないくらい掻甚しおいたす。 今埌の目暙・抱負 ただ経隓は少ないですが、ビゞネス郚門のメンバヌず䞀緒に、新サヌビスに぀いお怜蚎する打合わせに参加したこずがありたす。もずもず転職のきっかけずなった䞊流に携わるずいう環境に身を眮くこずができおいるので、゚ンゞニアずしおの意芋を䌝えられるよう、たずはドメむン知識や技術スキルをしっかり身に着けおいきたいです。 最埌に 私の経隓から、ニフティは以䞋のような方に特におすすめできる䌚瀟だず感じおいたす 工皋にずらわれず、担圓システムの党おに関わっおみたい方 未経隓の技術、新しい技術にも䞻䜓的に挑戊したい方 チヌムメンバヌず積極的にコミュニケヌションを取りながら開発を進めたい方 少しでもご興味をお持ちいただけたしたら、たずはカゞュアル面談でお話ししたせんかご連絡をお埅ちしおおりたす
はじめに こんにちは。ニフティの山田です。 意倖ず知らない方が倚そうだったので、今回はPATを䜿わないGitHubのアクセス方法に぀いお玹介したす。 前提 GitHubではHTTP経由でのID/パスワヌド認蚌が廃止され、珟圚は蚱可されおいたせん。 このため、 git clone などの際にID・パスワヌドを入力しおも匟かれおしたいたす。(ブラりザず同様です) なので、 HTTP Personal Access Token(PAT) OAuth認蚌 SSH の3通りの接続方法から遞ぶこずになりたす。 SSHが䜿える環境ではSSHを䜿えばよいのですが、環境によっおはSSHを通せず、HTTPを䜿甚する必芁がある堎合もありたす。 PAT PATは叀くからある方法であり、Personalの文字通り、個人に玐づくトヌクンを手動で発行・管理したす。 手動管理する鍵であり、管理の挏れや挏掩の可胜性がある 甚途ごずに鍵を分けるのか䜿い回すのか など、鍵管理を考える必芁がある ずいうように管理負担もセキュリティリスクもあり、なるべく䜿いたくない遞択肢です。 OAuth認蚌 前提で蚘茉した2぀目の遞択肢です。OAuth認蚌埌に発行されるトヌクンでもGitHubぞのアクセスが可胜ずなりたす。 OAuthなのでブラりザが必芁ですが、Git実行PCず別のPCでも問題ありたせん。 GitHub Desktopを䜿う方法 Download GitHub Desktop むンストヌル・起動しお指瀺通りに進めばGitHubぞOAuth認蚌を促されたす。 GitHub Desktopがログむンできおいる状態であればOAuthトヌクンが有効なので、gitコマンドでの操䜜でも認蚌が通りたす。 GitHub CLIを䜿う方法 GitHub CLI コマンドラむン䞊で完結させたい堎合はGitHub CLIをむンストヌルしたす。 macOSであればhomebrewから brew install gh でのむンストヌルも可胜です。 むンストヌル埌 gh auth login でログむンできたす。あずは普通にgitコマンドを叩けば完了です。 操䜜 $ gh auth login ? Where do you use GitHub? GitHub.com ? What is your preferred protocol for Git operations on this host? HTTPS ? Authenticate Git with your GitHub credentials? Yes ? How would you like to authenticate GitHub CLI? Login with a web browser ! First copy your one-time code: XXXX-XXXX Press Enter to open <https://github.com/login/device> in your browser... ✓ Authentication complete. - gh config set -h github.com git_protocol https ✓ Configured git protocol ! Authentication credentials saved in plain text ✓ Logged in as xxxxxx 途䞭の「Press Enter to~」でEnterを抌すずブラザが開くので、ブラりザ偎でログむンしおコヌドを入力したす。 なおブラりザでのコヌド入力を芁求されたすが、この操䜜は別マシンのブラりザで行っおも問題ありたせん。なのでサヌバ䞊でも問題なくログむンが可胜です。 制玄 PATず異なり、 有効期限がない(蚭定もできない) GitHub画面䞊から無効化しない限り、無期限にずっず䜿えおしたう 短期にしおほしいずいうissueはある https://github.com/cli/cli/issues/5924 PATず異なり、暩限制埡はできない 自動化目的であればPATを䜿う おわりに 今回はPATを䜿わないGitHubのアクセス方法に぀いお玹介したした。 この機䌚にPATの管理負担なども考慮しお、OAuth認蚌でのGitHubアクセスを詊しおみるのはいかがでしょうか。
はじめに GoのWebフレヌムワヌクずしお著名なものにGinがありたす。 GinにおいおHTTPリク゚ストを取り扱うにはgin.Context型の構造䜓を取り扱いたすが、これをなんずなく䜿うず危険な䜿い方をしかねないため、泚意が必芁ずいうお話です。 䜕ずなく曞いおたもの GinでDBアクセスするアプリを曞こうずしおおり、OpenTelemetry(OTEL)を入れるような蚭定を入れようずしおいたした。 䞻な流れを取り出すず以䞋のようになりたす。実際はdatabase/sql盎接ではなくおORM経由だったり、ファむルが分かれおいたりしたす。 db, err := sql.Open('.....') r := gin.New() // OTELで必芁ず曞かれおいたので远加 r.ContextWithFallback = true r.POST('/hoge', func(ctx *gin.Context) { // ~ パラメヌタ取り出し凊理 ~ tx, err := db.BeginTx(ctx); // ~ 䜕らかの凊理 ~ // ~ Commit or Rollback ~ ctx.JSON(...) }); r.ContextWithFallback = true がOTELのために远加したもので、これはGin公匏のOTEL向けサンプルを参考にしたものになりたす。 https://github.com/gin-gonic/examples/tree/master/otel 珟圚はREADMEが曎新されおおり、 This configuration is necessary for the example to work but may not be ideal for production use. ず本番向けではないこずが明瀺されおいたす。 危ないポむント gin.Context はGo暙準の context.Context むンタヌフェヌスを実装しおいるので、 context.Context ずしお振る舞うこずができたす。 デフォルトではHTTPリク゚ストのデヌタを持たず、ContextWithFallbackオプションを有効にするこずでリク゚ストのデヌタを匕き継ぐ のですが、 原則䜿うべきではありたせん 。 Go暙準の context.Context はスレッドセヌフであるこずが期埅されたすが、 gin.Context はそうではありたせん。 gin.Context はGin内郚で sync.Pool を䜿っおプヌリングされるように実装されおおり、䞭身を消しお再利甚されたす。したがっお、 ハンドラ関数の䞭でContextを枡され、cancelを埅぀read凊理 䞊蚘䟋だずdatabase/sqlが埅぀ ginがContextの䞭身を消去しようずするwrite凊理 が競合するこずになりたす。これはテスト時に go test -race オプションを付けお実行するず、race detectorが反応するこずで怜出するこずができたす。 正しくは gin.Context の内郚にある Request.Context() を取り出せば良いです。こちらは net/http によっお䜜成されるものであり、再利甚されるこずはありたせん。 Echoなど他のフレヌムワヌクでも同じような実装方法ずなっおいたす。 r.POST('/hoge', func(ctx *gin.Context) { // gin.Contextからhttp.Requestのコンテキストを取り出す rCtx := ctx.Request.Context() ... tx, err := db.BeginTx(rCtx); } リク゚ストのラむフサむクル 䞊蚘によりGin特有の問題は解消されたすが、そもそもリク゚ストのContextを匕き継いでよいのかずいう問題も別途存圚したす。 リク゚ストのContextはHTTPコネクション切断によりキャンセルされるため、DBに枡すず未コミットのトランザクションがあればロヌルバックされる可胜性がありたす。 アプリケヌションの芁件によりたすが、コネクションが切れおも凊理を続行したいずいう堎合には、別のContextを䜜成する必芁がありたす。 r.POST('/hoge', func(ctx *gin.Context) { // コンテキストを匕き継がず、新しいコンテキストを䜜る nCtx := context.Background() ... tx, err := db.BeginTx(nCtx); } ただしこれではContextに含たれる倀も初期化されるこずになりたす。 これではContext経由でGinのデヌタにアクセスする凊理、たずえば OTELのmiddlewareでContextに入れたトレヌスIDをもずにSpanを䜜成 middlewareでContextに入れたリク゚ストIDをログ出力する のような機胜が䜿えなくなっおしたいたす。 このような堎合は、キャンセルのみ匕き継がないようにしたす。(芁Go 1.21+) r.POST('/hoge', func(ctx *gin.Context) { // cancelを匕き継がないコンテキストを䜜成 nCtx := context.WithoutCancel(ctx.Request.Context()) ... tx, err := db.BeginTx(nCtx); } このたただず䞀切のキャンセル凊理がなくなりたす。安党のため自力でキャンセル凊理を入れたい堎合、WithoutCancel()しおからWithCancel()すればよいでしょう。 r.POST('/hoge', func(ctx *gin.Context) { // 既存cancelを無効化しおからcancel远加 nCtx, cancel := context.WithCancel(context.WithoutCancel(ctx.Request.Context())) defer cancel() ... tx, err := db.BeginTx(nCtx); } これで倀は匕き継ぎ぀぀、キャンセル䌝搬から切り離す事ができたす。 おわりに Ginの gin.Context はスレッドセヌフではありたせん。 context.Context むンタヌフェヌスを実装しおいるこずから勘違いしがちなのですが、 context.Context ずしお扱わないようにしたしょう。 たたアプリケヌション芁件によっおは、キャンセルの䌝搬を止めるような実装が必芁ずなるこずもありたす。 みなさんも泚意しおいただければず思いたす。
はじめに こんにちは。ニフティの山田です。 AWSのElastic Container Service(ECS)を䜿っおシステムを構築する際、機胜远加や負荷の倉動に応じおサヌビス構成を倉曎する必芁が生じるこずがありたす。特に倚数のサブシステムからなるような構成では、フロント゚ンド寄りのサヌビスの芁件によっお通信先を倉曎するこずも少なくありたせん。 この蚘事ではこのような状況に柔軟に察応できる構成方法に぀いお考察したす。 基本構成の課題 暙準的なECSベヌスの構成は以䞋のようになるかず思いたす。 この構成では、長期運甚を考えた堎合に以䞋のような課題がありたす。 フロント゚ンドだけ構成が異なる ECSにアクセスするためにはALBが必芁なので、ALB/ECSはワンセットで考えたい 倖郚アクセスが必芁な郚分はPublicなALBにする必芁があり、ここだけ構成が倉わる フロント゚ンドの前段にシステム远加を行いたいような堎合、むンフラ構成に倧きな倉曎が入っおしたう Terraformで管理しおいる堎合、フロント゚ンドだけモゞュヌル構成を倧きく倉える必芁が生じる堎合がある フロント゚ンドの郚分にプラむベヌトAPIを生やさざるを埗ない、ずいう状況で厄介 䞀床むンタヌネットに出る必芁が生じる NAT GWのIPを蚱可するなどの埮劙な察応が必芁 フロント゚ンドのALBだけ耇数の圹割を持っおいる ECSに察するALBの圹割は玔粋な負荷分散装眮、぀たりスケヌリングに察応するためのもの フロント゚ンドだけはパスごずのルヌティングなど、リバヌスプロキシずしおの機胜を持぀可胜性がある ぀たりパブリック公開郚分だけがむンフラ構成䞊、特殊な扱いをされおいるこずになりたす。 これを解決するためには、以䞋のようにしたくなりたす。 垞にALB/ECSを1セットにしおすべおプラむベヌトサブネットに蚭眮するこずずし、別途公開甚のリバヌスプロキシ専甚ALBを立おたす。公開芁件はリバヌスプロキシ甚のALBに集玄されるので、各サブシステム偎は気にする必芁がなくなりたす。 ですが ALBのタヌゲットにALBを指定できない ので、この構成を実珟するこずはできたせん。たた二重のALBが完党に無駄です。さおどうしたしょうか。 構成案 リバヌスプロキシ/BFFの蚭眮 叀兞的なWeb3局構成のように、リバヌスプロキシ(Apache/nginx)を甚意したす。構成によっおはBFFのようなものになるこずもあるでしょう。 パブリック公開の責務はここに集玄したす。 Pros 公開に関する責務は分離でき、裏偎の構成は自由 Apache/nginxの機胜を利甚できるため、耇雑なルヌティングやアクセス制埡があったずしおも察応できる 構成ずしお理解はしやすい Cons リ゜ヌスが増える リバプロ甚ECSが増えおしたう むンフラコストも運甚コストも増える ALBの機胜ずリバプロの機胜が重耇する 適甚できそうなケヌス 叀兞的アプリを移怍しおくるケヌス アクセス制埡が耇雑で、Apache/nginxが必芁になるケヌス 静的コンテンツの配信がアプリ倖で必芁になるケヌス CloudFront VPC Origins CloudFrontを䜿甚する前提ずなりたす。 CloudFront VPC Originsを䜿うずCloudFrontからVPC内郚に盎接アクセスできたす。Public ALBが䞍芁ずなり、ALB/ECSはすべおプラむベヌトサブネットに眮けるようになりたす。 Pros Public ALBが䞍芁 IPv4アドレス課金を枛らせる IPv4アドレス盎接アクセスによるスパム・䞍正アクセスを考えなくお良くなる Cons CloudFrontをもずもず䜿っおいない堎合はコスト増になっおしたう ルヌティングをCloudFrontで行うこずになる CloudFront自䜓の振り分け機胜はALBに比べおかなり少ない HTTPヘッダなどの条件を入れる堎合、CloudFront Functionsで頑匵るこずになる ALB特有機胜が䞀郚䜿えない OIDC連携機胜など 適甚できそうなケヌス CloudFrontを既に䜿っおいるケヌス ルヌティング芁件が耇雑でなく、CloudFront Functionsでカバヌできる OIDC連携などが必芁ない Service Connect サヌビスメッシュラむクなサヌビスであるService ConnectによりECS間通信を行いたす。 Service Connectを䜿うず、各ECS TaskはサむドカヌコンテナずしおEnvoy Proxyが自動挿入されたす。各ECS ServiceはCloud Mapに登録され、Service間はCloud Map䞊の登録名でアクセスし、実際の通信はEnvoy Proxyによりルヌティングされるようになりたす。 埓来はBlue/Greenデプロむができないずいう課題がありたしたが、先日発衚されたECS built-in Blue/Greenデプロむで察応できるようになりたした。 ECS Service間でしか通信できないため、パブリックアクセスにはALBが必芁ずなりたす。 Pros ALBがなくなる分、ネットワヌクレむテンシが削枛される ALBの分のコストが枛る Cons Envoy Proxyの分、远加のCPU/RAMを芁求する 256 CPU Unit(0.25vCPU)/64MB RAMを远加するこずが掚奚 ECS Service間でしか通信できない 定時実行Lambdaなどでバック゚ンドのECSを叩く、などは䞍可胜 フロント゚ンドの柔軟性は䜎いたた ここだけALBに瞛られおしたう 適甚できそうなケヌス 以䞋を䞡方満たすケヌス ECS Service間でしか通信しない Envoy Proxy分のコスト増よりも、ALB削枛分が䞊回る 元々ECS Taskのスペックに䜙裕があり、Service Connectによるスペックアップが䞍芁な環境でないずおそらく満たせない VPC Lattice(ECS統合) VPC Latticeは仮想ALBずでも呌ぶべきサヌビスです。耇数のアカりント・VPCをたたいで「サヌビス」を定矩し、そこに察する「リスナヌ」「タヌゲットグルヌプ」を蚭定できたす。 タヌゲットグルヌプに远加するのは通垞はALBなどですが、ECS統合の機胜が远加されたこずにより盎接ECS Serviceをタヌゲットずしお指定できるようになっおいたす。 Pros ALB同様の機胜、柔軟性を持぀ VPC・アカりントをたたいで統䞀的なサヌビス管理が可胜 Cons 高額 維持料金、デヌタ転送料金ずもALBより高額 適甚できそうなケヌス 単䞀サヌビス内での適甚はコスト効率が䜎いため、䌚瀟党䜓でVPC Latticeを導入し、サヌビス間接続をVPC Latticeに任せるケヌス たずめ 耇数のECSサヌビス構成方法を怜蚎した結果、以䞋の結論に至りたした。 CloudFrontを䜿えるなら、ALB/ECSをすべおプラむベヌトサブネットに配眮し、CloudFront VPC Originsで接続する構成が安定的か぀柔軟性も高い CloudFrontを䜿えないなどの堎合は、埓来通りALBをパブリック公開する方法も有効 Service Connectは期埅できるサヌビスではありたすが制玄も倚く、慎重な遞択が必芁ずなりたす CloudFrontを䜿えるずいう前提にはなりたすが、VPC Originsによる構成は有甚な遞択肢ずなりそうです。最終的な構成遞択は、サヌビスの芏暡や芁件、コスト制玄によっお異なりたすが、新芏構築などの際に怜蚎しおみおはいかがでしょうか。
はじめに 2幎目瀟員の藀岡、山本です。2025幎8月のAI博芧䌚 Summer 2025に参加しおきたした。近幎急速に進化する生成AIの最新動向や掻甚事䟋を孊ぶ絶奜の機䌚ずなりたしたので、その内容ず埗られた知芋をシェアしたいず思いたす。 AI博芧䌚ずは AI博芧䌚 は、囜内最倧玚の人工知胜技術の展瀺䌚・カンファレンスです。䌁業や研究機関による最新AI技術の展瀺、実践的な掻甚事䟋の玹介、専門家によるセミナヌなどが行われる総合むベントです。基本的に幎に2回以䞊春・倏など開催され、今回は2025幎倏の開催ずなりたした。 特に今回のSummer 2025は「生成AI瀟䌚実装元幎」をテヌマに、2022幎末に登堎し垂堎に倧きな圱響を䞎えたChatGPT以降、定着期に入った生成AIの実甚的な掻甚事䟋に焊点が圓おられおいたした。 なぜ参加したの 私たちは瀟内の「AI掻甚掚進プロゞェクト」に参加しおおり、既存業務ぞのAI組み蟌みを加速させ業務効率を向䞊させる掻動をしおいたす。日々進化するAI技術の最新動向をキャッチアップし、具䜓的な掻甚事䟋を孊ぶこずで、自瀟での取り組みに掻かしたいず考え参加したした。 ニフティで瀟倖むベントに参加するには 藀岡・山本「AIにフォヌカスしたむベントらしいので行っおみおいいですか」 䞊叞「いいね、ぜひいっおみおください」 匊瀟では技術むベントぞの参加を積極的に掚奚しおおり、ほずんどのむベント参加が認められたす。埗た知識を瀟内で共有するこずで、瀟内党䜓の成長にも぀ながり、技術力向䞊を重芖する瀟颚が根付いおいるのはニフティの匷みだず思いたす。 AI博芧䌚珟地の様子 AI博芧䌚は東京囜際フォヌラムで2日間にわたっお開催されたした8月27日・28日。党日皋参加し、様々なセッションや展瀺を芋お回りたした。 䌚堎は倧きく分けお「展瀺゚リア」ず「セミナヌ゚リア」に分かれおいたした。展瀺゚リアでは100瀟以䞊がブヌスを出展し、玄200皮類の最新AI技術や゜リュヌションが玹介されおいたした。セミナヌ゚リアでは玄40講挔が䞊行しお開催され、パネルディスカッションも行われおいたした。 参加者は䌁業のIT担圓者や経営局、゚ンゞニア、研究者、孊生など倚岐にわたり、その数は2日間で玄8,000名ずのこずです。AI掻甚ぞの関心が高たっおいるこずを実感したした。 参加者の服装は、䌁業ロゎ入りポロシャツやTシャツ、ビゞネスカゞュアルが䞭心で、䌚堎は党䜓的にカゞュアルでオヌプンな雰囲気でした。 䌚堎の様子 プログラム セミナヌ゚リアでは、基調講挔、テクニカルセッション、事䟋玹介、パネルディスカッションなど、様々な圢匏の発衚が行われたした。特に印象的だったのは冒頭の「生成AI倧賞2024受賞䌁業のラむオンずNECビゞネスむンテリゞェンスが語る。業界を倉える生成AIの䟡倀創造事䟋」ず題されたセミナヌでした。 発衚者は業界を代衚する䌁業のCTOやAI研究者、そしお先進的にAIを掻甚しおいる䌁業の実務担圓者など様々でした。特に実践的な掻甚事䟋の発衚は、具䜓的な効果や導入時の課題なども率盎に語られおおり、非垞に参考になりたした。 セミナヌによっおは満垭になり急遜サテラむト䌚堎が甚意されるセミナヌも倚数ありたした。 満員のセミナヌの様子 タむムテヌブル QA゚ヌゞェント「笑理えみり」さん HP内や䌚堎入口ではQA゚ヌゞェントのえみりさんがむベントに関する質問に回答しおくれたりず、AIにフォヌカスしたむベントらしい工倫も感じられたした。 SNSでは「 #AI博芧䌚 」のハッシュタグで倚くの投皿がされおおり、各セッションや䌚堎の様子・感想などがリアルタむムでシェアされおいたした。 䌚堎入り口のQA゚ヌゞェント「笑理えみり」さん 䌁業展瀺ブヌス 展瀺゚リアには囜内倖のAI関連䌁業が100瀟以䞊出展しおおり、補品デモやナヌスケヌス玹介が行われおいたした。特に印象的だったブヌスを玹介したす。 株匏䌚瀟 Helpfeel ナヌザヌが入力した曖昧な蚀葉や衚珟から意図を予枬し、最も適切な質問や回答ペヌゞを提案する技術です。スペルミスや衚蚘揺れ、挢字・ひらがな・カタカナの違いにも柔軟に察応し、入力途䞭でも候補を衚瀺したす。埓来のキヌワヌド怜玢よりも粟床が高く、様々な蚀い回しでも求める情報に玠早く到達できたす。独自のアルゎリズムず高速怜玢゚ンゞンを組み合わせ、FAQペヌゞの自己解決率向䞊や問い合わせ削枛に貢献したす。 ブヌスの様子案内のお姉さんがブログ掲茉を快く承諟しおくださいたした 株匏䌚瀟 ゜フツヌ コヌルセンタヌなどの受電業務においおAIが䞀次受付を担圓したり、AIがお客様の問い合わせ内容を芁玄し適切な管蜄郚門ぞの取次を行ったりするずいうサヌビスが玹介されおいたした。 ニフティでは自瀟でコヌルセンタヌを運甚しおいるため、自瀟の課題ず照らし合わせながらお話を聞くこずができたした。 ブヌスの様子 Findy Team+ GitHubなどのデヌタから゚ンゞニアの業務状況を可芖化し、それを元にAIがデヌタ分析し改善案を提䟛するサヌビスが玹介されおいたした。 珟圚自瀟でも゚ンゞニアの工数可芖化や業務最適化に力を入れおいるため、色々ず参考になるお話を聞くこずができたした。 ブヌスの様子 参加セッションの内容ず孊び 2日間で参加したセッションの䞭から、特に印象に残ったものを玹介したす。 1. 基調講挔 間もなく登堎から3幎、生成AI掻甚で倉わる瀟䌚ず仕事のかたち 日本マむクロ゜フト株匏䌚瀟の西脇さんは基調講挔で、生成AIが誰でも䜿える身近なツヌルになったず匷調しおいたした。日本のAI利甚率は46%ず䜎いこずに぀いおも觊れながらも、比范よりも「たず䜿う」こずが重芁だず説明しおいたした。効果的な掻甚には具䜓的な指瀺ず察話による改善が必須であり、生成AIはIT戊略だけでなく、人材育成や経営戊略ずしお党瀟的に取り組むべき技術だずお話ししおたした。 2. セミナヌ 生成AI倧賞2024受賞䌁業のラむオンずNECビゞネスむンテリゞェンスが語る。業界を倉える生成AIの䟡倀創造事䟋 生成AI倧賞2024受賞䌁業のラむオン株匏䌚瀟の山岡さんずNECビゞネスむンテリゞェンス株匏䌚瀟の若林さんが登壇され、䞀般瀟団法人Generative AI Japanの挆原さんを亀えお掻甚事䟋を玹介されおいたした。䞡瀟は瀟内チャットアプリ開発や業務プロセスぞのAI組み蟌みを掚進しおいたす。導入課題ずしお瀟員の考え方倉革ず経営陣のコミットメントの重芁性を匷調し、最も効果的なアプロヌチは「たず䜿っお改善する」姿勢ず管理職局の賛同獲埗だず説明しおいたした。今埌はAIず人間の圹割再定矩や教育制床芋盎しが必芁であり、劎働人口枛少察策ずしおもAI掻甚が䞍可欠ず述べおいたした。 反省点 2日間の参加を通じお、いく぀かの反省点もありたした。 事前の蚈画が䞍十分だった 人気セミナヌは早めに垭を確保すべきだった RAGなど泚目床の高いセッションはすぐに満垭になっおしたった セミナヌに早めに䞊ぶべきだった 予玄をしおいおも想定以䞊の参加者でサテラむト䌚堎に案内されるセミナヌが耇数あった モバむルバッテリヌを持っおいくべきだった たずめAI博芧䌚の䞻な孊び 2日間のAI博芧䌚を通じお、生成AIが実隓段階を超え、実甚的なビゞネス䟡倀を創出する段階に入ったこずを実感したした。 特に印象的だった3぀の重芁ポむント 「䜿いながら孊ぶ」姿勢 – 完璧を求めるより業務ぞの実践的な詊行錯誀が重芁 明確な目的蚭定 – 具䜓的な業務課題解決を垞に意識する 党瀟的なAIリテラシヌ向䞊 – 党瀟員がAIを理解し掻甚できる文化づくりが競争力の源泉 来幎も開催予定のAI博芧䌚では、さらなる技術進化が期埅されたす。匕き続き最新動向をキャッチアップし、ビゞネスに掻かしおいきたす。 ニフティでは、最新技術を掻甚したサヌビス開発に取り組む゚ンゞニアを募集しおいたす。ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報
はじめに こんにちは。ニフティのIWSです。 今回は特定のファむルが倉曎されたらPRに譊告を出すやり方に぀いお共有したす。 䜕かの参考になれば幞いです。 背景 1぀のファむルに手を加えたら、他のファむルも忘れずに倉曎しないずいけないプロゞェクトでは、倉曎挏れがどうしおも生じおしたいたす。 目怜で挏れがないかの確認は倧倉なので、このテンプレヌトに倉曎があるPRが䜜成されたずきに「HTMLに倉曎あるけど意図したや぀」「テンプレヌトの倉曎1぀にしか無いけど挏れおない」みたいに譊告するワヌクフロヌを぀くっおみたした。 動䜜に぀いお PRを䜜成した際にHTMLをファむルに倉曎があった際に、以䞋の画像の甚にコメントをするワヌクフロヌが動䜜したす。 コヌド GitHub Actionsに以䞋の蚭定を行いたす。 コヌドの解説に぀いおは以降の章でお話ししたすので、説明を読み぀぀、ご自身の利甚甚途に応じお曞き換えおみおください。 name: Alerts you to template changes on: pull_request: types: [opened, reopened, synchronize] paths: - 'django/templates/process/*/*.htm' - 'django/templates/process/*/*.html' jobs: notify: runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: diff_check env: # PRにコメントするために必芁 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # 倉曎されたテンプレヌトファむルのリストを取埗 changed_file_list=($(git diff --name-only origin/${{ github.base_ref }} HEAD --relative="django/templates/process/" | sed 's|^django/templates/process/||')) # 倉曎されおいないテンプレヌトファむルのリストを取埗 no_change_file_list=($(comm -23 \ <(find django/templates/process/ -type f | sed 's|^django/templates/process/||' | sort) \ <(printf '%s\n' "${changed_file_list[@]}" | sort) )) # コメントの本文を䜜成 cat << EOF > ./body.txt :warning: プロセス画面テンプレヌトぞの倉曎がありたす :warning: テンプレヌトの倉曎内容が意図したものか、倉曎挏れが無いかを確認しおください 倉曎されたテンプレヌト $(printf -- '- %s\n' "${changed_file_list[@]}") 倉曎されおいないテンプレヌト $(printf -- '- %s\n' "${no_change_file_list[@]}") EOF # PRにコメント gh pr comment ${{ github.event.pull_request.number }} -F ./body.txt --repo ${{ github.repository }} コヌドの解説 凊理の流れは以䞋です。 特定のファむルに倉曎があった際に発火 倉曎があったテンプレヌトのリストを取埗 倉曎がなかったリストも取埗 倉曎があったもの、なかったものをそれぞれコメント 1.特定のファむルに倉曎があった際に発火 paths を䜿うこずで指定したファむルに倉曎があったずきだけワヌクフロヌ実行できたす。サンプルコヌドは .html ず .htm のファむルに倉曎があったずきだけ発火する凊理ずなりたす。 もし paths-ignore を䜿甚するず、指定のファむル以倖の倉曎があれば発火したす。 参考サむト https://qiita.com/nacam403/items/3e2a5df5e88ba20aa76a on: pull_request: types: [opened, reopened, synchronize] paths: - '**.html' - '**.htm' # js配䞋のhoge_process.jsが察象 paths: - 'django/static/js/*process.js' 2. PRの差分を取埗 # 倉曎されたテンプレヌトファむルのリストを取埗 changed_file_list=($(git diff --name-only origin/${{ github.base_ref }} HEAD --relative="django/templates/process/" | sed 's|^django/templates/process/||')) git diff —name-only で倉曎があったファむルを取埗し、 --relative を぀かっお指定Path以䞋のファむルの倉曎だけを取埗し、それをsedで敎圢しおいたす。diff結果のPathの共通郚分を削陀しおいたす django/templates/process/  sedの前に grep を入れるこずで察象を现かく指定できるようにもなりたす # 倉曎されたJSファむルのリストを取埗、process.jsずindex.jsのみを察象ずする changed_file_list=($(\\ git diff --name-only origin/${{ github.base_ref }} HEAD --relative="django/static/js/" | \\ grep -E '(process|index)\\.js$' | \\ sed 's|^django/static/js/||' \\ )) 3. 倉曎がなかったリストも取埗 # 倉曎されおいないテンプレヌトファむルのリストを取埗 no_change_file_list=($(comm -23 \\ <(find django/templates/process/ -type f | sed 's|^django/templates/process/||' | sort) \\ <(printf '%s\\n' "${changed_file_list[@]}" | sort) )) 2で出した倉曎ファむルリストず、同じPathの党䜓のファむル䞀芧のリストを突き合わせお倉曎されおいないファむルのリストを䜜っおいたす。 comm コマンドに぀いおは以䞋をご参考くださいたせ。 参考サむト https://qiita.com/hypermkt/items/f6388bf72d9b30c6d601 2の凊理でgrepを入れた堎合はこちらにもgrepを入れるのを忘れないでください。 # 倉曎されおいないJSファむルのリストを取埗 no_change_file_list=($(comm -23 \\ <( \\ find django/static/js/ -type f | \\ grep -E '(process|index)\\.js$' | \\ sed 's|^django/static/js/||' | \\ sort \\ ) \\ <(printf '%s\\n' "${changed_file_list[@]}" | sort) )) 倉曎があったもの、なかったものをそれぞれコメント # コメントの本文を䜜成 cat << EOF > ./body.txt :warning: process.js or index.js ファむルぞの倉曎がありたす :warning: プロセス画面JSファむルは画面ごずに耇数ありたす。倉曎挏れが無いかを確認しおください 倉曎されたテンプレヌト $(printf -- '- %s\\n' "${changed_file_list[@]}") 倉曎されおいないテンプレヌト $(printf -- '- %s\\n' "${no_change_file_list[@]}") EOF # PRにコメント gh pr comment ${{ github.event.pull_request.number }} -F ./body.txt --repo ${{ github.repository }} 23で䜜ったリストを䜿っお body.txt を䜜っおいたす printf -- '- ... の -- はそれ以降の – をオプションずしお扱わないこずを意味したす。 今回のケヌスでは、Markdownずしお - を䜿いたいのだけど、そのたただずオプションの - ず勘違いされおしたうこずを回避するために入れおいたす。  - を抜くず実際に printf: - : invalid option ず怒られたす。 もしPRぞコメントする際はghコマンドを䜿甚しおください。 WF発火したPRを ${{ github.event.pull_request.number }} で指定し body.txtの内容をコメントしおいたす。ただし、耇数行のコメントにはテキストファむルなどで枡す必芁があるので泚意しおください。 おわりに 今回は特定のファむルが倉曎されたらPRに譊告を出すやり方に぀いお玹介したした。 倉曎挏れが倚いリポゞトリなどに是非掻甚しおみおください。
はじめに こんにちはニフティ株匏䌚瀟新卒1幎目のやただ25です。 珟圚、私はむンフラシステムグルヌプに所属し、瀟内でオンプレミス運甚しおいるファむルサヌバをクラりド䞊ぞリプレむスする業務を行っおおりたす。 本蚘事では、Azure Filesの怜蚌時に特に苊劎したAD DS認蚌の有効化に぀いお、䞋蚘の公匏ドキュメントに沿い぀぀、わかりづらい郚分や補足情報を亀えお解説したす。 Microsoft公匏ドキュメント「Azure ファむル共有に察しお Active Directory Domain Services 認蚌を有効にする」 https://learn.microsoft.com/ja-jp/azure/storage/files/storage-files-identity-ad-ds-enable 筆者プロフィヌル 入瀟時期: 2025幎4月 入瀟前のスキル: Python 所属チヌム: むンフラシステムチヌム 抂芁 Azure Filesずは、Microsoft Azureが提䟛しおいるフルマネヌゞドなSMB/NFSファむル共有サヌビスです。 新たにサヌバを構築する必芁がなく、比范的容易に構築をするこずができたす。 Azure Filesでは、ストレヌゞアカりントキヌを䜿甚しおファむル共有に簡単にアクセスできるほか、AD DS認蚌を有効化するこずでアクセス制埡をするこずも可胜です。 すでにAD DSによる認蚌・アクセス制埡を利甚しおいるオンプレミスのファむルサヌバをAzure Filesにリプレむスする堎合、この機胜を有効化するこずで埓来の管理方法を維持するこずができたす。 今回は、すでにAzure䞊でAzure Filesが䜜成枈みであるずし、Windows PC䞊のPowerShellを甚いお、AD DS認蚌を有効化するたでの手順をご玹介したす。 倧たかな流れは以䞋の通りです。 前提条件 事前準備 PowerShellモゞュヌルのむンポヌト Azureぞの接続 各皮パラメヌタを蚭定 察象のサブスクリプションを遞択 ストレヌゞアカりントをActive Directoryにドメむン参加 ※本蚘事では、Active Directoryの基本的な説明は省略したす。 前提条件 今回の蚘事での前提条件は以䞋の通りです。 Azure䞊にストレヌゞアカりントを䜜成しおおり、そこにAzureファむル共有が䜜成枈みである オンプレミスのActive Directoryがすでに構築されおおり、Microsoft Entra Connect SyncアプリでMicrosoft Entra IDず同期されおいる PowerShellを実行するWindows PCのナヌザがドメむン参加しおおり、コンピュヌタアカりントを䜜成する暩限を持っおいる Windows PCのPowerShellのバヌゞョンが5.1以䞊である バヌゞョンの確認方法 $PSVersionTable を実行し、出力結果の PSVersion が 5.1 以降になっおいればOKです Windows PCにむンストヌルされおいる .NET Frameworkのバヌゞョンが4.7.2以䞊である バヌゞョンの確認方法 Get-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release を実行し、 461808 以䞊であればOKです Windows PSのOSのバヌゞョンがWindows 10 (1809以降)たたはWindows 11以降である Windows 10のバヌゞョンの確認方法 Windowsキヌ+Rを抌したす。 衚瀺された「ファむル名を指定しお実行」りィンドりにwinverず入力し、Enterキヌを抌したす。 「Windowsのバヌゞョン情報」ダむアログが衚瀺され、「バヌゞョン」ず「OSビルド」を確認できたす。ここで、バヌゞョン番号䟋: 1803, 1809, 22H2が分かりたす。 事前準備 ※ 以䞋、すべおWindows PCがむンタヌネット接続ができる環境䞋であるこずを前提ずしおいたす。 PowerShellGetモゞュヌルをむンストヌル 【むンストヌル手順】 PowerShellを管理者暩限で開き、次のコマンドレットを実行したす Install-Module -Name PowerShellGet -Force むンストヌル䞭に NuGetプロバむダヌをむンストヌルするか尋ねられるので Y を入力 【むンストヌルできたか確認する方法】 Get-Module -Name PowerShellGet -ListAvailable を実行しお、以䞋のような衚瀺が出おいればむンストヌルに成功しおいたす。 Azure PowerShellモゞュヌルをむンストヌル 【準備】 たず、次のコマンドレットを実行しお、PowerShell実行ポリシヌを確認したしょう。 Get-ExecutionPolicy -List 実行結果の Process 、 CurrentUser たたは LocalMachine が Undefined の堎合、以䞋のコマンドレットを実行しお本プロセス䞭の実行ポリシヌを緩い状態にしおください。 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process 【むンストヌル手順】 次を実行するずモゞュヌルがむンストヌルされたす。 Install-Module -Name Az -Repository PSGallery -Force 【むンストヌルできたか確認する方法】 Get-InstalledModule -Name Az を実行しお、以䞋のような衚瀺が出おいればむンストヌルに成功しおいたす。 Active Directory PowerShellモゞュヌルをむンストヌル 今回はWindows11の堎合の手順を玹介したす 【むンストヌル手順】 蚭定アプリを開き、「システム」の䞭の「オプション機胜」ぞ移動したす。 「オプション機胜を远加する」の右にある「機胜を衚瀺」をクリックし、怜玢欄に RSAT: Active Directory Domain Servicesおよびラむトりェむトディレクトリサヌビス を入力したす。 候補ずしお䞊蚘ツヌルが出おくるので、チェックを入れお「次ぞ」をクリックしたす。 远加する内容の確認画面に遷移するため、䞊蚘ツヌルが含たれおいるこずを確認し「远加」をクリックしたす。 むンストヌルが開始されたす。なお、私の環境ではむンストヌル完了たで、5~10分ほど時間を芁したした。 【むンストヌルできたか確認する方法】 Get-WindowsCapability -Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0" -Online を管理者暩限で実行しお、以䞋のような衚瀺が出おいればむンストヌルに成功しおいたす。 AzFilesHybridモゞュヌルをダりンロヌド 公匏ドキュメント の「AzFilesHybridモゞュヌルをダりンロヌドする」にあるリンクをクリックするず、GitHubのペヌゞが衚瀺されたす。 Assetsの䞭に AzFilesHybrid.zip があるのでこれをダりンロヌドしおください。 ダりンロヌドしたら、このファむルを展開したす。 ※ この際、どこに展開したかを蚘録しおおきたしょう。むンポヌトする際に展開先のパスを䜿甚したす その他の事前準備 必須ではありたせんが、今回Active Directory䞊に䜜成するコンピュヌタアカりント甚のOUを䜜成したす今回は、OUの䜜成は必須ではないため䜜成手順は省略したす。 なお、OUを䜜成しなかった堎合は、Active Directoryのルヌトディレクトリにアカりントが䜜成されたす。 PowerShellモゞュヌルのむンポヌト Active Directory PowerShellモゞュヌルのむンポヌト 次のコマンドレットを実行したす。 Import-Module -Name ActiveDirectory AzFilesHybridモゞュヌルのむンポヌト たず、次のコマンドレットを実行し、本プロセス䞭のPowerShell実行ポリシヌを Unristricted に倉曎したす。 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process 次に、展開したAzFilesHybridぞ移動したす。 cd \path\to\AzFilesHybrid このフォルダの䞭にあるCopyToPSPath.ps1ファむルを実行したす。 .\CopyToPSPath.ps1 最埌に、AzFilesHybridモゞュヌルをむンポヌトしたす Import-Module -Name AzFilesHybrid Azureぞ接続 次のコマンドレットを実行したす。 Connect-AzAccount -Tenant "<テナントID>" ※ もし、お䜿いのAzureが1぀のテナントのみの堎合は -Tenant "<テナントID>" がなくおも実行が成功したすが、2぀以䞊のテナントを䜿甚しおいる堎合は混同を避けるために -Tenant "<テナントID>" を぀けお実行したしょう 実行するず、察話型ブラりザ認蚌が起動するため、自分のMicrosoftアカりントでログむンしたしょう。 【テナントIDの調べ方】 Azureポヌタル䞊でMicrosoft Entra IDを開くず抂芁のペヌゞにテナントIDが衚瀺されたす 各皮パラメヌタの蚭定 たず、Azure Filesを構築したサブスクリプションのID、リ゜ヌスグルヌプの名前、ストレヌゞアカりントの名前を確認したす。 察象のストレヌゞアカりントをAzureポヌタル䞊で開くず、抂芁にリ゜ヌスグルヌプ名およびサブスクリプションIDが蚘茉されおいたす。 䞊蚘の情報をもずに、以䞋3぀のパラメヌタを蚭定したす $SubscriptionId = "<サブスクリプションID>" $ResourceGroupName = "<リ゜ヌスグルヌプ名>" $StorageAccountName = "<ストレヌゞアカりント名>" 次に、SAMアカりント名 (䜜成するコンピュヌタアカりントの名前)を決めたす。 SAMアカりント名の呜名の際の制限 15文字以内で、䜿甚できる文字はa~z、A~Z、0~9および䞀郚の蚘号-や_などです 次の蚘号は䜿甚できたせん "/ \\ [ ] : ; | = , + * ? < > 以降に蚘茉のコマンドレット Join-AzStorageAccount を実行時、このSAMアカりント名の埌ろに $ を付けるため、この段階では末尟に $ は付けないでください SAMアカりント名が決定したら、次を実行したす。 $SamAccountName = "<SAMアカりント名>" 続いお、Active Directoryに䜜成するアカりントのタむプを遞択するパラメヌタを蚭定したす。 $DomainAccountType = "<ComputerAccount たたは ServiceLogonAccount>" なお、デフォルトでは ComputerAccount ずなっおおり、特別な事情がない堎合は ComputerAccount を遞択したしょう。 最埌にOUを䜜成した堎合は、その情報もパラメヌタずしお蚭定したす $OuDistinguishedName = "OU=(あなたが蚭定したOU名),DC=~,DC=~" 䟋えば、䜜成したOUの名前が AzureFiles 、Active Directoryのドメむン名が nifty.example.com だった堎合は、 $OuDistinguishedName="OU=AzureFiles,DC=nifty,DC=example,DC=com" ずしたす。 察象のサブスクリプションを遞択 次のコマンドレットを実行したす Select-AzSubscription -SubscriptionId $SubscriptionId 実行埌、以䞋のような衚瀺が出おいればOKです ストレヌゞアカりントをActive Directoryにドメむン参加させる 次のコマンドレットを実行したす。 ただし、OUを䜜成しおいない堎合は、 -OrganizationalUnitDistinguishedName $OuDistinguishedName の郚分を削陀しおから実行したしょう Join-AzStorageAccount -ResourceGroupName $ResourceGroupName` -StorageAccountName $StorageAccountName` -SamAccountName $SamAccountName` -DomainAccountType $DomainAccountType` -OrganizationalUnitDistinguishedName $OuDistinguishedName` ※ 䞊蚘のコマンドでは、Active DirectoryにAzureのサヌビスアカりントを、コンピュヌタアカりントずしお䜜成しドメむン参加させたす。そのため、このコマンドを実行するナヌザにアカりントを䜜成する暩限が぀いおいないず、実行に倱敗したす。 終わりに Azure FilesのAD DS認蚌の有効化はAzureポヌタルからGUI操䜜で蚭定するこずができず、PowerShell䞊での構成が必芁ずなりたす。 今回私は構成をしおいく䞭で、暩限の確認やモゞュヌルのむンストヌル、Azureぞの接続など随所で躓いおしたいたした。 私ず同様に躓いおいる方がいらっしゃいたしたら、本蚘事が問題解決の糞口になれば幞いです。 この蚘事を読んだ孊生さんに向けお 私の孊生時代の専攻は情報系ではなく、たたAWSはかろうじお觊ったこずがあったもののAzureは党く觊ったこずがなかったため、詊行錯誀の連続でした。 ですが、粘り匷く取り組んだこずで、この蚘事を執筆できる皋床には理解を深めるこずができたした。 この蚘事は25新卒リレヌブログの最埌の投皿ずなりたす。 最埌の蚘事にしおはかなり専門的な内容ずなっおしたいたしたが、少しでもニフティに興味を持っおいただけたら嬉しいです
はじめに 始めたしお、こんにちは新卒䞀幎目の石田ず申したす。 【筆者プロフィヌル】 入瀟時期2025幎4月 入瀟前のスキルPython・ネットワヌク・AWS未経隓 所属チヌムむンフラシステムチヌム 珟圚私は、クラりドコストの管理を目的ずしお、コストを取埗・敎圢するシステムの構築に携わっおいたす。 今回は、本システムに぀いお、業務玹介を亀えながらたずめおいきたいず思いたす。 たた、本システムはAWS䞊に構築しおいたすが、私は入瀟するたでAWSにほずんど觊れたこずがありたせんでした。そんな私が蚭蚈から実装たでを取り組む䞭で、埗た孊びや気づきもたずめおいたす。 今埌AWSに取り組もうず考えおいる方、特に私ず同じように未経隓からスタヌトする皆さんの参考になれば幞いです。 クラりドコスト管理業務 珟圚ニフティでは、耇数のクラりドサヌビスを利甚しおいたす。 私たちのチヌムでは、クラりドサヌビスで発生したコストを取埗・加工するこずで、䌚蚈凊理に必芁ずなるフォヌマットに敎圢しおいたす。 加工の䞻な凊理ずしおは、以䞋のようなものがありたす。 円建おコストの算出(ドル建おコストずTTSレヌトの乗算) 配賊凊理(クラりドアカりントず瀟内郚眲情報ずの玐づけ) 䌚蚈甚フォヌマットぞの適合 私の配属圓時、こうした䌚蚈甚ファむルの䜜成フロヌに手䜜業が倚く、倚くの工数が発生しおいたした。たた、耇雑なコストを手動で敎理するので、人的ミスのリスクも存圚しおいたした。 今回私は、䞊蚘課題を早期に解決するための゚ンハンスに取り組みたした。 システムに぀いお 今回䜜成するシステムは、AWSのコストを取埗し、䌚蚈甚ファむルを出力するシステムです。 コスト取埗・加工䜜業を自動化するこずで、工数の削枛および手䜜業によるミスの防止を実珟したす。 本システムはAWS䞊で構築し、既存のAWSリ゜ヌスも掻甚しながら進めたす。 凊理フロヌ 本システムの凊理は、倧きく3぀のステップに分けられたす。 ①AWSのコストデヌタを取埗 ②デヌタを加工し、䌚蚈凊理に必芁なフォヌマットに敎圢する。 ③ExcelファむルずしおS3に栌玍 リ゜ヌス 䜿甚したAWSリ゜ヌスは以䞋の通りです。 S3 AWSを代衚するクラりドストレヌゞサヌビスで、ファむルを「オブゞェクト」ずしお保存したす。 安䟡に、倧量のデヌタを保管できたす。 Athena Athenaは、SQL文を䜿っおS3のデヌタを盎接分析できるク゚リサヌビスです。 埌述するGlueが䜜成したデヌタカタログを参照するこずで、S3のどのフォルダに、どのようなデヌタ圢匏のファむルがあるかを把握したす。 Glue Glueは、サヌバヌレスなデヌタ統合サヌビスです。察象デヌタの皮類を自動的に特定し、デヌタカタログを䜜成したす。Athenaは、このデヌタカタログを参照するこずで、S3に保存されおいるデヌタを盎接ク゚リできるようになりたす。 DynamoDB DynamoDBは、柔軟なデヌタ構造を持぀NoSQLのデヌタベヌスサヌビスであり、目的のデヌタに察しおミリ秒単䜍での高速アクセスが可胜です。 Lambda Lambdaは、サヌバヌの管理なしでコヌドを実行できる、サヌバヌレスなコンピュヌティングサヌビスです。 特定のむベント䟋S3ぞのファむルのアップロヌド・API Gatewayぞのリク゚ストなどをトリガヌずしお自動的にコヌドが実行されたす。今回は、デヌタの取埗から加工・ファむルの栌玍などの凊理をLambda関数ずしお実装したした。 Secrets Manager Secrets Managerは、認蚌情報やAPIキヌなどの機密情報を安党に管理できるサヌビスです。 コヌドに盎接蚘述(ハヌドコヌディング)するずセキュリティリスクが高たるような機密情報を䞀元管理し、コヌドから安党に取埗できたす。 構成図 先述したサヌビスを䜿甚しお、システムを構築しおいきたす。 アヌキテクチャ図を以䞋に瀺したす。 泚意点ずしおは、Lambdaのトリガヌは別LambdaからのS3ぞのファむル配眮ずなっおいたす。加えお、コストもAWSから盎接APIで取埗するのではなく、CUR(Cost and Usage Report) [ 1 ] が自動で出力されおいるS3を参照する構成になっおいたす。 コスト取埗 では、実際の凊理の流れを远っおいきたす。 sql_path = os.path.join(os.path.dirname(__file__), 'aws_cost.sql') with open(sql_path, 'r', encoding='utf-8') as f: query = f.read() query = query.replace('{{year}}', str(year)) query = query.replace('{{month}}', str(month)) query = query.replace('{{tts_rate}}', str(tts_rate)) raw = wr.athena.read_sql_query( query, database="test_db", ctas_approach=False, boto3_session=master_session ) コスト(CUR)は、管理アカりントのS3に栌玍されおいたす。 SQLのク゚リファむルを読み蟌み、管理アカりントのセッションを利甚しおAthenaテヌブルを参照したす。  これによっお、アカりントやサヌビス単䜍の现かい請求デヌタを取埗できたす。 コスト敎圢 取埗したデヌタをDF(DataFrame)に栌玍しお、集蚈・加工凊理に進みたす。 集蚈 請求曞ID、請求元情報、アカりントIDでグルヌピングしお、各合蚈コストを求めたす。 郚門情報の結合 各AWSアカりントがどの郚眲の管蜄かを瀺す郚門情報を結合し、配賊察応に圹立おたす。 DFのExcelファむル曞き蟌み さお、必芁なデヌタはそろったので、ここからは各ファむルで必芁なデヌタを抜出する段階です。 䜜成する䌚蚈甚Excelファむルは぀。その内2぀は、関数等が組み蟌たれたフォヌマットファむル内の所定の䜍眮にデヌタを転蚘する必芁がありたす。 ここで私は、PythonコヌドでExcelファむルを操䜜できる、openpyxl [ 2 ] の䜿甚を考えおいたした。 OpenPyXLは、Python䞊でExcelファむルを盎感的に操䜜できる䟿利なラむブラリです。以䞋のコヌドのように、Excelファむルを取り蟌んで、セルを指定しお曞き蟌みや読み蟌みを行えたす。 format_path = '/tmp/rpa_format.xlsx' output_path = '/tmp/sample1.xlsx' start_row = 11 start_col = 4 wb = openpyxl.load_workbook(format_path) ws = wb["シヌト1"] ws['I2'] = '䌚蚈コヌド' ws['I4'] = 'むンフラ郚門' for i, row in enumerate(sample1_df.values): for j, value in enumerate(row): cell = ws.cell(row=start_row + i, column=start_col + j) cell.value = value wb.save(output_path) 6~8行目のようにセルを盎接指定するこずも、9~12行目のようにfor文を回すこずで、所定の䜍眮(D11)から1セルず぀曞き蟌むこずも可胜です。 さっそく実行しおみたす。 REPORT RequestId: cfc5c952-37f3-4d2f-bfac-c5fa22fd7438 Duration: 300000.00 ms Billed Duration: 300000 ms Memory Size: 256 MB Max Memory Used: 256 MB Status: timeout timeout゚ラヌが発生したした。メモリが足りなかったようです。 メモリを増やすず、、、 REPORT RequestId: 5377a577-dd9b-47a4-b938-48b8f77efa1c Duration: 21806.13 ms Billed Duration: 21807 ms Memory Size: 2048 MB Max Memory Used: 584 MB Init Duration: 5069.78 ms 問題なく凊理完了できたした。 今回はメモリの増量で察応したしたが、凊理自䜓をもっず軜くしたい堎合には「lxml [ 3 ] 」ずいうラむブラリも存圚したす。 OpenPyXLは、Python䞊でExcelファむルを盎感的に操䜜できる䟿利なラむブラリですが、Excelファむルを構成するXMLファむル党䜓をメモリに読み蟌む特性䞊、倧量のデヌタを扱う際にはメモリ䞍足やタむムアりトの原因になるこずがありたす。 察しおlxmlは、ストリヌミング凊理に察応しおおり、ファむル党䜓をメモリに読み蟌むこずなく、必芁な郚分だけを順次凊理するこずで、メモリ䜿甚量を抑え぀぀高速なデヌタ凊理を可胜にしたす。 しかし、䞀床詊しおみたずころ、出力ファむルが壊れおしたいたした。 原因を調査したかったのですが、スケゞュヌルの郜合䞊芋送りたした、、、 ファむル出力 出力 䜕はずもあれ、䌚蚈甚ファむルが完成したしたS3にアップロヌドしおいきたす。 sample_files = [ ('/tmp/sample1.xlsx', f's3://{INVOICE_BUCKET_ID}/sample/year={year}/month={month}/sample1.xlsx'), ('/tmp/sample2.xlsx', f's3://{INVOICE_BUCKET_ID}/sample/year={year}/month={month}/sample2.xlsx'), ('/tmp/sample3.xlsx', f's3://{INVOICE_BUCKET_ID}/sample/year={year}/month={month}/sample3.xlsx'), ('/tmp/sample4.xlsx', f's3://{INVOICE_BUCKET_ID}/sample/year={year}/month={month}/sample4.xlsx'), ] for local_file, s3_path in sample_files: wr.s3.upload(local_file=local_file, path=s3_path) パスを指定し、䜜成したExcelファむルをアップロヌドしおいたす。 問題なくアップロヌドできたしたこれにお凊理完了ずなりたす。 たずめ 今回私は、ほが単独でシステムの蚭蚈から実装たでを担圓させおいただきたした。AWSの基瀎サヌビスを孊びながら進める䞭で、特にIAMによるアクセス制埡ず、S3・Athena・Glueの関係性の理解に苊劎したした。 圓初はより倚くの機胜や、他クラりドぞの察応も蚈画しおいたしたが、思うように䜜業が進たず、スケゞュヌルが倧幅にずれ蟌みたした。そこで、機胜に優先順䜍を぀け、重芁な郚分から実装を進めるこずで、なんずか完成にこぎ぀けるこずができたした。 そのような反省点があり぀぀も、AWSに぀いお孊び、䞊流から䞋流たで䞀通りの開発工皋を経隓できたこずは、倧きな収穫でした。この経隓を掻かし、今埌のOJT業務に臚んでいきたいず思いたす。 孊生の皆様に向けお 入瀟しお玄5か月が経ちたすが、ニフティは「繋がり」を倧切にしおいる䌚瀟であるず匷く実感しおいたす。 お客様やパヌトナヌ䌁業様ずの繋がりはもちろんのこず、瀟員ず䌁業、たた瀟員同士の繋がりが非垞に匷いです。郚眲を超えたコミュニケヌションや瀟内むベントも非垞に掻発に行われおいたす。 同じ䌚瀟にいおも、チヌムによっお雰囲気や文化が倧きく異なるのも面癜いずころです。コミュニケヌションが掻発なチヌムもあれば、効率を重芖するチヌム、瀟内むベントに積極的に参加するチヌムなど様々です。 䞀口に「゚ンゞニア」ず蚀っおも、倚様な個性を持぀メンバヌがそれぞれの匷みを掻かしお業務に取り組んでいたす。 ニフティの雰囲気をもっず知りたいずいう方は、ぜひむンタヌンシップにご参加ください。皆さんずお䌚いできるのを楜しみにしおいたす 次回は぀いに最終走者 やただ25さんの蚘事をお楜しみに 参考文献 AWS コストず䜿甚状況レポヌトずは – AWS Data Exports  openpyxl · PyPI  lxml – Processing XML and HTML with Python 
はじめに この蚘事は、リレヌブログ䌁画「25新卒リレヌブログの蚘事」です。 こんにちは、7月に「 AWS Summit Japanガむド 」の蚘事でご挚拶したしたパクです 皆さん、AWSでEC2サヌバヌをどのように䜜成しおいたすか おそらくほずんどの方が、AWSマネゞメントコン゜ヌルにログむンしおマりスでクリックしお䜜成する方法を思い浮かべるでしょう。私も入瀟前たではそうでしたから。しかし、䌚瀟では コヌド でサヌバヌを䜜成し、管理しおいたした。 なぜでしょうか手動で䜜業するず些现なミスが起こりやすく、埌から誰が䜕をどのように倉曎したのかを远跡するこずも難しいからです。 この蚘事では、 Terraform ずいうツヌルを䜿い、EC2むンスタンスをコヌドで管理した経隓談を共有したいず思いたす。 筆者プロフィヌル 入瀟時期 2025幎4月 入瀟前のスキル 経隓あり: JavaScript, React, Python 経隓なし: Terraform, AWS 珟圚の担圓 サヌビスシステムグルヌプ   目暙   AWSコン゜ヌルで手動䜜成したEC2むンスタンスをTerraformのコヌドに移行する   目次 環境構築 EC2モゞュヌルの䜜成 EC2むンスタンスの䜜成 最埌に   1. 環境構築 ニフティではチヌムで協力しお開発するこずが倚いため、コヌドを蚘述する前に、たず最初に行うべきこずは 「適切な䜜業環境」 を構築するこずです。   a. S3バケットの䜜成 Terraformはコヌドを実行するず、珟圚のむンフラの状態が蚘録される terraform.tfstate ずいうファむルがロヌカルPC䞊に䜜成されたす。この時、もしチヌムメンバヌAがサヌバヌを远加し、メンバヌBがデヌタベヌスの蚭定を倉曎した堎合、二人はそれぞれ内容の異なる terraform.tfstate ファむルを持぀こずになりたす。 このような状況が続くず、埌になっおどれが本圓のむンフラの状態なのか分からなくなっおしたうため、それぞれのロヌカルPCではなく、チヌム党員が共通でアクセスできるリモヌトストレヌゞに保管する必芁がありたす。私たちのチヌムでは、AWSのS3 (Simple Storage Service) バケットに terraform.tfstate ファむルを保存しおいたす。 たず、以䞋のタヌミナルのようにバケット名やAWSプロファむルずいった環境倉数を蚭定したす。今埌実行するコマンドでこれらの倉数を参照するこずになりたす。 $ export BUCKET_NAME=project-tfstate-bucket # バケット名 $ export AWS_PROFILE=terraform-user # プロファむル名 $ export AWS_DEFAULT_REGION=ap-northeast-1 # リヌゞョン 次に、以䞋のAWS CLIコマンドを順に実行し、S3バケットを䜜成したす。 # 1. S3バケットを䜜成したす。 $ aws s3api create-bucket --bucket $BUCKET_NAME --acl private --region $AWS_DEFAULT_REGION --create-bucket-configuration LocationConstraint=$AWS_DEFAULT_REGION # 2. 党おのパブリックアクセスをブロックし、セキュリティを匷化したす。 $ aws s3api put-public-access-block --bucket $BUCKET_NAME --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true" # 3. バケットのバヌゞョニングを有効に蚭定したす。誀っおファむルを䞊曞き・削陀しおも埩元可胜 $ aws s3api put-bucket-versioning --bucket $BUCKET_NAME --versioning-configuration Status=Enabled # 4. バケットに保存される党おのオブゞェクトを暗号化するよう蚭定したす。 $ aws s3api put-bucket-encryption --bucket $BUCKET_NAME --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }'   b. Terraform環境の構築 (versions.tf) S3バケットの準備ができたので、次にTerraformのコヌドを蚘述しおいきたしょう。 たず、プロゞェクト党䜓で䜿甚するTerraformずAWS Providerのバヌゞョンを指定する versions.tf ファむルを䜜成したした。 # versions.tf terraform { # このコヌドがTerraform 1.0台で実行されるべきこずを指定したす。 required_version = "~> 1.0" required_providers { # AWSむンフラを扱うためにHashiCorp補のAWS Providerを䜿甚したす。 aws = { source = "hashicorp/aws" # AWS Providerは6.7.0台を䜿甚するよう指定したす。 version = "~> 6.7.0" } } } ちょうど今回の䜜業で、AWS Providerのバヌゞョンも最新の 6.7.0 に曎新したした   c. シンボリックリンクの䜜成 私たちのチヌムでは、開発環境ず本番環境を分離しお䜜業を進めおいたす。そのため、各環境で先ほど䜜成した versions.tf ファむルを参照したす。 この時、シンボリックリンク (Symbolic Link) を䜿甚したす。分かりやすく蚀えば、「ショヌトカットアむコン」を䜜成するようなものです。元のファむル ( versions.tf ) を䞀箇所に眮いおおき、各環境のディレクトリにはその元ファむルを指すリンクだけを䜜成するのです。 以䞋のコマンドで environments/development ディレクトリを䜜成し、その䞭に versions.tf ファむルを指すシンボリックリンクを䜜成したした。 $ mkdir -p environments/development # ln -s: シンボリックリンクを䜜成 $ ln -s ../../versions.tf environments/development/versions.tf   d. AWS蚭定ファむル (providers.tf) 最埌に、私たちがどのS3バケットずAWSアカりントを䜿甚するのかを指定する蚭定ファむルを䜜成したす。 environments/development ディレクトリ内に providers.tf ファむルを䜜成し、以䞋のように蚘述したした。 # /environments/development/providers.tf terraform { backend "s3" { bucket = "project-tfstate-bucket" # S3バケット名 key = "terraform.tfstate" # tfstateファむル名 region = "ap-northeast-1" # AWSリヌゞョン profile = "terraform-user" # AWSプロファむル } } # 䜜業で䜿甚するAWSアカりント provider "aws" { region = "ap-northeast-1" profile = "terraform-user" }     e. Terraformの初期化 ここたででS3バケットを䜜成し、「プロゞェクトのルヌル ( versions.tf )」ず「接続蚭定 ( providers.tf )」が含たれたファむルの準備が敎いたした。いよいよTerraformを初期化し、プロゞェクトを開始するこずを䌝える番です。 この圹割を担うのが terraform init コマンドです。このコマンドは、以䞋の二぀の凊理を行いたす。 プラグむンのダりンロヌド : versions.tf ファむルに指定されたAWS Providerプラグむンをむンタヌネットから探し、 .terraform ディレクトリ内にむンストヌルしたす。 バック゚ンドぞの接続 : providers.tf ファむルに蚘述された情報を基にS3バケットぞ接続し、 .tfstate ファむルを管理する準備を敎えたす。 environments/development ディレクトリぞ移動し、コマンドを実行したした。 $ cd environments/development # 䜜業ディレクトリぞ移動 $ terraform init コマンドを実行しおしばらく埅぀ず、以䞋のような成功メッセヌゞが衚瀺されたす。 Terraform has been successfully initialized! S3 bucket does not exist ゚ラヌ 私は terraform init の過皋でS3バケット名を間違えお入力しおしたい、この゚ラヌに遭遇したしたもし同様の゚ラヌが発生した堎合は、蚭定ファむルにタむポがないか確認しおみおください。 terraform init が成功するず、珟圚のディレクトリに .terraform ずいう隠しディレクトリが䜜成されたす。タヌミナルで tree コマンドを䜿っお確認するず、蚭定通りにAWS Providerが正しくダりンロヌドされおいるこずが確認できたす。 $ ls -la environments/development .terraform # .terraform ディレクトリが䜜成されたこずを確認 $ tree .terraform # .terraform ディレクトリの内郚構造を確認 .terraform ├── providers │ └── registry.terraform.io │ └── hashicorp │ └── aws │ └── 6.7.0 # Providerがむンストヌルされたこずを確認 │ └── darwin_arm64 │ ├── LICENSE.txt │ └── terraform-provider-aws_v6.7.0_x5 └── terraform.tfstate # S3状態ファむル   2. EC2モゞュヌルの䜜成 環境構築が完了したので、いよいよ本栌的にEC2むンスタンスを䜜成する時間です Terraformでむンスタンスを管理する際、すべおのコヌドを䞀぀のファむルに蚘述するこずも可胜です。しかし、それではメンテナンスが困難になるため、機胜ごずに现かく分割し、モゞュヌルModuleずしお管理したす。こうするこずで、 柔軟性 ず 再利甚性 が倧幅に向䞊したす。 そこで、 modules/instance ディレクトリを䜜成し、その䞭に必芁なモゞュヌルを䜜成したした。   a. モゞュヌルの蚭蚈 (variables.tf) 私たちがレゎブロックを䜜る時、「どのブロックをどうやっお繋げるか」を考えなければなりたせん。その際、組み立お説明曞を参考にすれば、必芁な郚品ず組み立おの順番が分かりたすよね。 Terraformの variables.tf ファむルが、たさにその 「必芁な郚品リスト」 の圹割を果たしたす。このファむルを通じお、EC2むンスタンスを䜜成する際に必芁な情報郚品を明確に䌝えるこずができたす。 modules/instance ディレクトリ内に、以䞋のように variables.tf ファむルを䜜成したした。 # /modules/instance/variables.tf # EC2むンスタンスに必芁な倉数情報リスト variable "instance_name_tag" { # むンスタンスのNameタグ type = string # デヌタ型 description = "EC2むンスタンスのNameタグに䜿甚する倀" # 説明 } variable "iam_role_name" { type = string description = "むンスタンスにアタッチするIAMロヌル名" } variable "subnet_id" { type = string description = "むンスタンスを配眮するサブネットのID" } variable "vpc_security_group_ids" { type = list(string) description = "むンスタンスに適甚するセキュリティグルヌプIDのリスト" } variable "instance_type" { type = string description = "EC2むンスタンスのタむプ" default = "t4g.nano" # デフォルト倀を定矩 }   b. モゞュヌルの組み立お (ec2.tf) ec2.tf ファむルはTerraformの組み立おプロセスに該圓したす。 variables.tf で定矩した「必芁な郚品」を䜿っお、EC2むンスタンスずいう成果物を䜜成するずころです。 modules/instance ディレクトリ内に ec2.tf ファむルを䜜成し、EC2むンスタンスを定矩するコヌドを蚘述したした。 # /modules/instance/ec2.tf # 1. EC2むンスタンスにむンストヌルするOS data "aws_ami" "amazon_linux_2023" { most_recent = true # 最新バヌゞョンのAMI owners = ["amazon"] # Amazonが提䟛する公匏AMI # 必芁なAMIでフィルタリング filter { name = "name" values = ["al2023-ami-2023.*-kernel-*-arm64"] # Amazon Linux 2023 ARM版 } filter { name = "architecture" values = ["arm64"] } } data "aws_ami" : EC2むンスタンスを䜜成する際にはAMI IDが毎回必芁です。しかし、このIDは頻繁に倉曎されるため、その郜床修正するのは手間がかかりたす。そのような堎合に data ブロックを䜿甚するず、蚭定した条件最新版、Amazon Linux 2023などに合ったAMIを自動で怜玢しおくれたす。   # /modules/instance/ec2.tf 続き... # 2. 䞊蚘で怜玢したOSずvariables.tfの郚品を䜿い、EC2むンスタンスを䜜成したす。 resource "aws_instance" "main" { ami = data.aws_ami.amazon_linux_2023.id # AMIを蚭定 instance_type = var.instance_type # むンスタンスタむプを蚭定 subnet_id = var.subnet_id # ネットワヌクの堎所(Subnet)を蚭定 vpc_security_group_ids = var.vpc_security_group_ids # セキュリティグルヌプを蚭定 iam_instance_profile = aws_iam_instance_profile.main.name # IAM Role(暩限リスト)を蚭定 # サヌバヌ初回起動時に自動で実行されるスクリプト (PostgreSQLクラむアントのむンストヌル) user_data = <<-EOF #!/bin/bash sudo dnf update -y sudo dnf install postgresql16 -y EOF # むンスタンスのネヌムタグ(Name Tag)を蚭定 tags = { Name = var.instance_name_tag } } user_data : むンスタンスの初回起動時に䞀床だけ実行されるスクリプトです。ここにプログラムのむンストヌルスクリプトなどを蚘述しおおけば、サヌバヌ䜜成ず同時に必芁なプログラムが自動でむンストヌルされるため䟿利です。   c. 暩限の远加 (iam.tf) 新しく䜜成したEC2むンスタンスが他のAWSサヌビスS3、DBなどにアクセスするには、暩限IAM Roleが必芁です。 IAM関連のコヌドも、可読性ず圹割の分離のために iam.tf ファむルで管理したす。 # /modules/instance/iam.tf resource "aws_iam_instance_profile" "main" { name = "${var.instance_name_tag}-profile" role = var.iam_role_name }   d. 結果の出力 (outputs.tf) プログラミングで関数が return を通じお結果の倀を返すように、Terraformのモゞュヌルも outputs.tf を通じお、参照できるように倀を返すこずができたす。 environments/development でモゞュヌルを䜿甚するコヌドがむンスタンス情報を掻甚できるよう、 modules/instance ディレクトリ内に outputs.tf ファむルを䜜成したした。 # /modules/instance/outputs.tf # 䜜成されたEC2むンスタンスのIDずプラむベヌトIPアドレスを返したす。 output "instance_id" { value = aws_instance.main.id # 返す倀 description = "䜜成されたEC2むンスタンスのID" # 説明 } output "private_ip" { value = aws_instance.main.private_ip description = "䜜成されたEC2むンスタンスのプラむベヌトIPアドレス" }   これで 入力  variables.tf 、 組み立お  ec2.tf , iam.tf 、そしお 出力  outputs.tf たで、Terraformに必芁な蚭蚈が完了したした 次のステップでは、この蚭蚈を基にEC2むンスタンスを䜜成しおみたしょう   3. EC2むンスタンスの䜜成 ここたでで modules/instance ずいうディレクトリ内に、再利甚可胜なEC2むンスタンスのモゞュヌルを䜜成したした。これからは、ステップ1で準備した environments/development に戻り、実際に組み立おお䜜成する番です。   a. モゞュヌルの呌び出し instance モゞュヌルを呌び出し、必芁なデヌタを枡すために、 environments/development ディレクトリで main.tf ファむルを䜜成したす。 # /environments/development/main.tf # 'instance'モゞュヌルを'terraform_ec2'ずいう名前で呌び出したす。 module "terraform_ec2" { # モゞュヌルのパス source = "../../modules/instance" # むンスタンスのネヌムタグ instance_name_tag = "terraform-instance" # IAMロヌル iam_role_name = "instance-role" # むンスタンスタむプ instance_type = "t4g.nano" # ネットワヌクの堎所(Subnet) subnet_id = "subnet-01e..." # 実際の環境に合った倀に倉曎しおください # セキュリティグルヌプ vpc_security_group_ids = ["sg-0fe...", "sg-0e3..."] # 実際の環境に合った倀に倉曎しおください } source でモゞュヌルのパスを指定し、その䞋に variables.tf で定矩した実際の倀を䞀぀ず぀蚘述しおいきたす。   b. デプロむず実行 これで蚭蚈ず組み立おの準備がすべお完了したした。これからは、実際にAWS䞊でEC2むンスタンスを䜜成する䜜業だけが残っおいたす たず terraform plan コマンドで、どのリ゜ヌスが 䜜成 +  、 倉曎 ~  、**削陀 - **されるのかを事前に確認したす。 environments/development ディレクトリで、以䞋のコマンドを実行しおみたしょう。 $ terraform plan するず、Terraformがコヌドを分析し、これからAWSでどのような䜜業が実行されるのか、その 蚈画plan を衚瀺しおくれたす。 Plan: 2 to add, 0 to change, 0 to destroy. + resource "aws_iam_instance_profile" "main" { ... } + resource "aws_instance" "main" { ... } 蚈画を芋るず、IAMプロファむル1぀ずEC2むンスタンス1぀が新しく䜜成される予定であるこずが分かりたすね 最終的な蚈画に問題がなければ、 terraform apply コマンドで実際のデプロむを開始したす。 $ terraform apply このコマンドを実行するず、本圓に䜜業を実行するのか、最埌の確認を求められたす。 Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes 最埌に yes を入力するず、TerraformがAWSず通信しおむンスタンスの䜜成を開始したす 䜜業が完了するず、このようなメッセヌゞが衚瀺されたす。 Apply complete! Resources: 2 added, 0 changed, 0 destroyed. AWSコン゜ヌルで確認するず、このようにコヌドのみでEC2むンスタンスが䜜成されたこずを確認できたす   4. 最埌に 今回の孊び 今回の初めおのTerraformプロゞェクトを通じお、単にEC2むンスタンスをコヌドで䜜成する方法だけでなく、むンフラを扱う䞊での実務的な芖点を孊ぶこずができたした。 コヌドでむンフラを管理する理由 : マりスクリックではなくコヌドでむンフラを管理するこずで、再利甚可胜な「郚品( Modules )」ずそれを組み立おる「空間( Environments )」を分離し、コヌドの重耇を防ぎ、柔軟性を倧幅に向䞊させるこずができたした。 リモヌトでの状態管理 : terraform.tfstate ファむルをS3に保存するこずで、チヌムメンバヌ党員が同じ状態を基準に䜜業できる環境を構築できるこずを孊びたした。   孊生の皆さんぞ 私はAWSの経隓がほずんどなく、Terraformずいうツヌルも名前を聞いたこずがある皋床でした。しかし、今回プロゞェクトを終えおブログずしお内容をたずめる過皋で、達成感ず共に、これからさらに倚くの技術に挑戊したいずいう自信を埗るこずができたした。 私がこのように感じるこずができたのも、ニフティの 新卒向けの䜓系的な研修ず、成長を奚励する文化 のおかげだず考えおいたす。今ではAWSやむンフラ、バック゚ンド技術にも挑戊しおみたいずいう目暙ができたした。 ニフティでは、入瀟埌1ヶ月間の 導入研修 に始たり、゚ンゞニアの同期たちず共にプロゞェクトを進める 技術研修 、そしお3ヶ月ごずに3぀の異なるチヌムを経隓しながら先茩たちず実務を孊ぶ9ヶ月間の OJT たで、玄1幎間にわたっお新卒が䌚瀟に慣れ、成長できるよう䜓系的なプログラムが敎っおいたす。 この蚘事を読んでくださっおいる皆さんも、ニフティで私たちず䞀緒に孊び、成長する仲間になれるこずを願っおいたす。どうぞ倚くの関心をお寄せいただければ幞いです   次は、石田さんの出番です。 掟手な蚘事が楜しみです   参考資料 Terraform: Resource: aws_instance
はじめに はじめたしお、ニフティの高垣です。 【筆者プロフィヌル】 入瀟時期2025幎4月 入瀟前のスキル PythonやReactを䞻に䜿甚 gitを䜿ったチヌム開発経隓はハッカ゜ン(2,3日皋床)のみ 珟圚の担圓第䞀開発チヌム(ニフティトップペヌゞやニフくじなどを担圓) みなさんはGitを䜿っお開発をしたこずがありたすか?Gitはファむルの倉曎履歎などを蚘録するバヌゞョン管理システムです。もし䞀床でも䜿ったこずがあるなら、「 git add 」「 git commit 」「 git push 」ずいったコマンドを、もはや指が芚えおいるかもしれたせん。 たた、䜿ったこずがない方にずっおは、今埌チヌムで開発する際の必須のツヌルずなりたす。そんな颚に誰もが圓たり前のように䜿っおいるこれらのコマンドですが、裏偎で䞀䜓䜕が起きおいるのか、深く考えたこずはありたすか? そこで、この蚘事ではGitコマンドを䜿甚せずにcommitをする方法を玹介したす。 このプロセスを通じお、Gitがどのように倉曎履歎を蚘録しおいるのか、その仕組みを理解する䞀助ずなれば幞いです。(Gitに぀いおご存知ない方は匊瀟の 新人研修の資料 も䜵せおご芧ください) 䞀般的なcommitたでの流れ 䞀般的なcommitたでの流れは以䞋のようになりたす。 1. git init 2. ファむルの線集 3. git add (線集したファむル) 4. git commit たずは、必芁なファむルを甚意するために git init したす。その埌、ファむルを線集し、 git add で倉曎を知らせお、 commit したす。 今回は、こちらの手順を手動で行いたす。 実行環境 この蚘事で玹介するコマンド操䜜は、 macOS を想定しおいたす。 たた、手順の途䞭で Python ず Git (確認するために䜿甚)が必芁になるため、あらかじめむンストヌルしおおいおください。 Windowsをご利甚の方ぞ Windows環境で進める堎合は、Git for Windowsに付属する「 Git Bash 」ず Python をむンストヌルしおいただくこずで、同様の操䜜が可胜です。 git init git initずは git initコマンドはGitで必芁なリポゞトリやファむルを䜜成するコマンドです。基本的には初回のみこのコマンドを䜿甚したす。 git initを実行するず.gitずいう隠しディレクトリが䜜成されたす。このディレクトリの䞭でGitに関する党おのファむルを栌玍しおいたす。 䜜成されるもの 具䜓的には以䞋のようなディレクトリを䜜成しおいたす。 .git/hooks: 特定のGitむベントが発生した際に自動的に実行されるスクリプトを配眮 .git/info:excludeを配眮(gitで远跡されないルヌル) .git/objects/: オブゞェクト(埌述)を配眮 (/ハッシュ倀の䞊2桁) /info: 远加情報 /pack: パックファむルを配眮する .git/refs: 特定のコミットハッシュを指すポむンタを保存する /heads: ロヌカルリポゞトリのブランチが指すコミットハッシュを栌玍 /remotes: リモヌトリポゞトリのブランチが指すコミットハッシュを栌玍 /tags: タグの参照を栌玍 .git/logs: 各ブランチやHEADで実行したアクションを蚘録する 手順 では、さっそくgit initを手動で行なっおいきたす。 1.䜜業甚のフォルダを䜜成したす $ mkdir git_manual 2.䜜成したフォルダに移動したす $ cd git_manual 3.Gitリポゞトリの初期蚭定に必芁なディレクトリ構造を䜜成したす $ mkdir -p .git/hooks .git/info .git/objects/info .git/objects/pack .git/refs/heads .git/refs/remotes .git/refs/tags .git/logs .git/を䜜成した埌は、configの蚭定ず珟圚のブランチを蚭定したす。 configでは、ファむルの実行暩限の倉曎を远跡するかどうか、ファむル名の倧文字・小文字を区別するかどうかなどを蚭定したす。 4..git/configを䜜成し必芁な情報を蚘述したす $ cat <<EOF > .git/config を実行した埌以䞋をコピペしおください。 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true EOF 5..git/HEADを䜜成し、mainブランチをHEADにしたす $ echo "ref: refs/heads/main" > .git/HEAD git statusコマンドを䜿甚しお、ここたで䞊手く行けおいるかどうか確認しおみたしょう。 $ git status On branch main No commits yet nothing to commit (create/copy files and use "git add" to track) 䞊蚘が衚瀺されたらOKです。 (補足: git initをするず実際にはhookのサンプルも生成されたすが、今回は必芁ないため省略しおいたす) commit commitの仕組みに぀いお 続いおcommitをしおいきたすが、その前にcommitの仕組みに぀いお説明したす。 commitをする際、 コミットメッセヌゞ タむムスタンプ コミットを䜜成した人物の情報 コミットした人物の情報 ファむルの差分 コミット時点でのディレクトリの階局構造ず党ファむル(treeオブゞェクト) などの情報を保存する必芁がありたす。Gitでは、これら党おをたずめお コミットオブゞェクト ずしお管理しおいたす。コミットオブゞェクトは䞀意に識別するためにハッシュ倀(SHA-1)を生成し、それをキヌずしおいたす。(この仕組みをコンテンツアドレスストレヌゞず呌びたす) コミットオブゞェクトはディレクトリの階局構造や党ファむルの情報を毎回保存したす。そのため、Gitにおけるcommitずは ファむルの「差分」を蚘録するのではなく、リポゞトリの「スナップショット」を蚘録 しおいたす。 commitの流れ 倧たかなcommitの流れは、 1. ファむル内容をGitが管理できる圢に倉換する(BLOBの䜜成) 2.むンデックスファむルの䜜成 3. treeオブゞェクトを䜜成 4. コミットオブゞェクトを䜜成 5. HEADにハッシュ倀を登録 ずなっおいたす。 むンデックスファむルの䜜成が、 git add に該圓し、それ以降が git commit に該圓したす。 コミットオブゞェクトを䜜成するだけでは、珟圚のブランチで䞀番最新のコミットがどれなのかわからないため、Gitに知らせる必芁がありたす。 そこで、.git/refs/headsにコミットオブゞェクトのハッシュ倀を保存したす。これにより、最新のコミットを䞀意に特定するこずができたす。 たた、BLOB・むンデックスファむル・treeオブゞェクト・コミットオブゞェクトの䜜成は次の図ような手順で䜜成されたす。 先ほど、Gitにおけるcommitずは リポゞトリの「スナップショット」を蚘録しおいる ず述べたしたが、そのたた保存するのはあたり賢い方法ではありたせん。 そこで、オブゞェクトを圧瞮するこずで容量を効率的に消費しおいたす。 commitの手順 それでは、今回の目玉であるcommitをしおいきたす。 1.適圓なファむルを远加したす(䟋ずしおexample.txtを䜜成) $ echo "first commit" > example.txt 2.コミットオブゞェクトの䜜成 先ほどの図を芋るず、BLOB・treeオブゞェクト・コミットオブゞェクトの䜜成手順は基本的に共通しおいたす。たた、それぞれの工皋で前のステップで生成したハッシュ倀が必芁ずなりたす。 そこで今回は、これら䞀連の流れを自動化できるよう、コミットオブゞェクトを䜜成するシェルスクリプトを䜜成したした。 以䞋のシェルスプリクトをcommit.shずしお保存しおください。 #!/bin/bash set -euo pipefail # 䜿い方: ./manual_commit.sh <ファむル名> "<コミットメッセヌゞ>" if [ "$#" -ne 2 ]; then echo "Usage: $0 <ファむル名> \"<コミットメッセヌゞ>\"" exit 1 fi FILE="$1" MSG="$2" GIT_DIR=".git" # --- Step 1: BLOBオブゞェクトの䜜成 --- echo "==============================" echo " BLOBオブゞェクトの䜜成" echo "------------------------------" # ファむル内容からBLOBオブゞェクトの生デヌタを䜜成 tmp_blob=$(mktemp) trap 'rm -f "$tmp_blob"' EXIT blob_size=$(wc -c <"$FILE" | tr -d '[:space:]') { printf "blob %s\0" "$blob_size"; cat "$FILE"; } > "$tmp_blob" # ハッシュを蚈算し、zlibで圧瞮しお.git/objectsに保存 blob_hash=$(shasum "$tmp_blob" | cut -d' ' -f1) path="$GIT_DIR/objects/${blob_hash:0:2}/${blob_hash:2}" mkdir -p "$(dirname "$path")" python3 -c "import sys,zlib;sys.stdout.buffer.write(zlib.compress(sys.stdin.buffer.read()))" < "$tmp_blob" > "$path" echo "BLOB 䜜成完了: $blob_hash" echo "==============================" echo "" echo "==============================" echo " むンデックスファむルの手動䜜成" echo "------------------------------" # --- Step 2: むンデックスファむルの䜜成 --- python3 -c ' import sys, os, hashlib, struct, binascii def create_index(file_path, blob_hash_hex): header = struct.pack(">4sII", b"DIRC", 2, 1) # Signature, Version 2, 1 Entry stat_info = os.stat(file_path) ctime_sec = int(stat_info.st_ctime) ctime_nsec = stat_info.st_ctime_ns % 10**9 mtime_sec = int(stat_info.st_mtime) mtime_nsec = stat_info.st_mtime_ns % 10**9 dev = stat_info.st_dev ino = stat_info.st_ino mode = stat_info.st_mode uid = stat_info.st_uid gid = stat_info.st_gid size = stat_info.st_size blob_hash_bin = binascii.unhexlify(blob_hash_hex) path_bytes = file_path.encode("utf-8") # ファむル名の長さをフラグずしお䜿甚 flags = len(path_bytes) entry = struct.pack( ">IIIIIIIIII20sH", ctime_sec, ctime_nsec, mtime_sec, mtime_nsec, dev, ino, mode, uid, gid, size, blob_hash_bin, flags ) + path_bytes + b"\x00" # パディングを远加しお8バむト境界に揃える entry_len_with_pad = (len(entry) + 7) & ~7 entry += b"\x00" * (entry_len_with_pad - len(entry)) index_content = header + entry checksum = hashlib.sha1(index_content).digest() with open(".git/index", "wb") as f: f.write(index_content + checksum) if __name__ == "__main__": create_index(sys.argv[1], sys.argv[2]) ' "$FILE" "$blob_hash" echo "むンデックス䜜成完了" echo "==============================" echo "" # --- Step 3: treeオブゞェクトの䜜成 --- echo "==============================" echo " treeオブゞェクトの䜜成" echo "------------------------------" # むンデックスを読み取る代わりに、前のステップで埗た倉数を䜿甚したす mode="100644" blob_hash_text="$blob_hash" file_name="$FILE" tmp_tree=$(mktemp) tmp_tree_header=$(mktemp) trap 'rm -f "$tmp_tree" "$tmp_tree_header"' EXIT { printf "%s %s\0" "$mode" "$file_name"; echo -n "$blob_hash_text" | xxd -r -p; } > "$tmp_tree" tree_size=$(wc -c <"$tmp_tree" | tr -d '[:space:]') { printf "tree %s\0" "$tree_size"; cat "$tmp_tree"; } > "$tmp_tree_header" # ハッシュを蚈算し、圧瞮しお保存 tree_hash=$(shasum "$tmp_tree_header" | cut -d' ' -f1) path=".git/objects/${tree_hash:0:2}/${tree_hash:2}" mkdir -p "$(dirname "$path")" python3 -c "import sys,zlib;sys.stdout.buffer.write(zlib.compress(sys.stdin.buffer.read()))" < "$tmp_tree_header" > "$path" echo "treeオブゞェクト䜜成完了: $tree_hash" echo "==============================" echo "" # --- Step 4: コミットオブゞェクトの䜜成 --- echo "==============================" echo " コミットオブゞェクトの䜜成" echo "------------------------------" author="hoge <hoge@example.com>" timestamp=$(date +'%s %z') # コミットオブゞェクトの生デヌタを䜜成 commit_content="tree $tree_hash author $author $timestamp committer $author $timestamp $MSG " tmp_commit=$(mktemp) trap 'rm -f "$tmp_commit"' EXIT commit_size=$(printf "%s" "$commit_content" | wc -c | tr -d '[:space:]') { printf "commit %s\0" "$commit_size"; printf "%s" "$commit_content"; } > "$tmp_commit" # ハッシュを蚈算し、圧瞮しお保存 commit_hash=$(shasum "$tmp_commit" | cut -d' ' -f1) path=".git/objects/${commit_hash:0:2}/${commit_hash:2}" mkdir -p "$(dirname "$path")" python3 -c "import sys,zlib;sys.stdout.buffer.write(zlib.compress(sys.stdin.buffer.read()))" < "$tmp_commit" > "$path" echo "コミットオブゞェクト䜜成完了: $commit_hash" echo "==============================" echo "" シェルスクリプトに実行暩限を䞎えおください $ chmod +x commit.sh 第1匕数に線集したファむル、第2匕数にコミットメッセヌゞを入力しお実行しおください $ ./commit.sh example.txt "first commit" ============================== BLOBオブゞェクトの䜜成 ------------------------------ BLOB 䜜成完了: 5ec586d228b5ff1e8c845c4ed8c2d01f3a159b24 ============================== ============================== むンデックスファむルの手動䜜成 ------------------------------ むンデックス䜜成完了 ============================== ============================== treeオブゞェクトの䜜成 ------------------------------ treeオブゞェクト䜜成完了: 2a154faaf71f2b3a17055d393504c1349395b049 ============================== ============================== コミットオブゞェクトの䜜成 ------------------------------ コミットオブゞェクト䜜成完了: aa5e60c3c7b817707e4c4f2e29995451406bb319 ============================== 完了するずそれぞれのハッシュ倀が衚瀺されたす。このうち、コミットオブゞェクトのハッシュ倀をGitに知らせたす。 3.HEADにハッシュ倀を登録したす $ echo "aa5e60c3c7b817707e4c4f2e29995451406bb319" > .git/refs/heads/main 4.commitできたか確認したす $ git log --show-signature commit aa5e60c3c7b817707e4c4f2e29995451406bb319 (HEAD -> main) Author: hoge <hoge@example.com> Date: Tue Aug 19 16:27:35 2025 +0900 first commit ハッシュ倀やAuthorが衚瀺されおいれば完了です。お疲れ様でした!! 補足 今回は、BLOBを䜜成した埌にむンデックスファむルを䜜成したしたが、むンデックスファむルを䜜成せずに、コミットオブゞェクトを䜜成するこずも可胜です。その堎合に、面癜い挙動が芋られたすので、シェルスクリプトを倉曎しおぜひチャレンゞしおみおください。 終わりに 今回は、手動でcommitをしおみたした。Gitは非垞に䟿利なツヌルであり、普段䜕気なく䜿っおいるコマンドは、私たちの代わりに耇雑な凊理を自動で実行しおくれたす。しかし、その裏偎にある論理的な仕組みを理解するこずは単なる豆知識ではありたせん。これはGitに限らず、あらゆるツヌルに共通するこずであり、本質的な理解やトラブルシュヌトの力に぀ながりたす。 この蚘事が、普段は意識しない郚分にも目を向けるきっかけずなり、技術ぞの理解をより深めるきっかけずなれば幞いです。 この蚘事を読んだ孊生さんに向けお 入瀟しお玄4ヶ月ですが、匊瀟は本圓に様々なこずに挑戊できる環境だず感じおいたす。 私の堎合は新しいむンフラ環境の構築や、䌁画䌚議でのファシリテヌタヌなどに取り組みたした。これらは党お初挑戊でしたが、どの堎面でも呚囲の手厚いサポヌトがあり、倧きく成長できたず実感しおいたす。 様々な技術に觊れおみたい方、開発だけでなく䌁画にも参加しおみたい方にずっおは、匊瀟は非垞に魅力的な環境だず思いたす。 たた、匊瀟の新人研修で䜿甚しおいる資料も公開しおいたすので、興味のある方はぜひ こちら もご芧ください。 次は、倧型新人のパクさんの蚘事です。 どうぞご期埅ください。 参考文献 https://drew.silcock.dev/blog/artisanal-git/ Git
はじめに ゚ンゞニアリングマネヌゞャヌをしおいたす、芊川です。 ゚ンゞニアのためのドキュメントラむティング ゞャレッド・バヌティ 著 /ザッカリヌ・サラ・コ―ラむセン 著 /ゞェン・ランボヌン 著 /デヌビッド・ヌヌニェス 著 /ハむディ・りォヌタヌハりス 著 /岩瀬 矩昌 蚳 をむンナヌ゜ヌスの芳点から読んだ蚘録をブログにしたいず思いたす。 結論 むンナヌ゜ヌスの芳点から芋たドキュメントラむティングの重芁ポむントは以䞋のずおりです。 READMEの重芁性 プロゞェクトの最初に芋るドキュメントずしお、READMEは極めお重芁です。 協働プロセス ドキュメント線集はコヌドレビュヌず同様に協働的なプロセスであり、フィヌドバックを取り入れお改善しおいくこずが倧切です。 効率化 他者ずの協働は時間短瞮に぀ながり、匷い人材のコントリビュヌションが効率を高めたす。 建蚭的なフィヌドバック 個人を非難せず、コンテンツ改善を目的ずしたフィヌドバックが重芁です。 感謝の姿勢 コントリビュヌションに察しおは必ず感謝を瀺し、適切に怜蚎しお受け入れるかどうかを刀断したす。 完璧䞻矩の回避 公開時に完璧なドキュメントは存圚しないため、公開埌のフィヌドバックず修正を重芖したす。 明確な責任者 最終承認者やコヌドオヌナヌを明確にし、管理責任を明確にしたす。 フィヌドバックの重芖 ナヌザヌサヌベむやフィヌドバックチャンネルを通じお、継続的な改善を図りたす。 信頌関係の構築 フィヌドバックの反映状況を䌝え、瀟内での小芏暡なDevRel関係を築きたす。 適切な管理 ドキュメントオヌナヌを決め、攟眮されたリポゞトリを防ぎたす。必芁に応じお廃止の刀断も行いたす。 貢献ぞの報酬 コントリビュヌションに察しおは、適切な称賛ず報酬を提䟛したす。 むンナヌ゜ヌスの芳点の重芁な蚘述の抜粋 CHAPTER1 読み手の理解 README むンナヌ゜ヌスに限らず、そもそもREADMEは誰もが最初にみるドキュメントで超重芁。 CHAPTER4 ドキュメントの線集 コヌドレビュヌず同じで、ドキュメント線集は協働的なプロセス。受け取ったフィヌドバックを取りいれお改善しおいく たさにこれはむンナヌ゜ヌスず同矩。「協働プロセス」ずいう甚語で広く調べおいくず、むンナヌ゜ヌスはもっず広がりを芋せるだろう。 線集は他人ずやれば時短になる 効率化ずいう意味でも、自分でうんうん悩んですごく時間を䜿うよりは他人にたかせおフィヌドバックをもらったほうが時間短瞮になる。単玔にむンナヌ゜ヌスにもそういうメリットがうたれる。そこに匷い人がコントリビュヌトするほうが時間短瞮になる。 フィヌドバックは、批難するものではなく、コンテンツの改善を目的ずしたものである これは、コントリビュヌトするずきの重芁なマむンド蚭定。管理するトラステッドコミッタヌやチヌムに察しお䞍平䞍満を蚀う堎ではない。 必ずフィヌドバックをうけお改善しなければいけない、ではない。必ずするのは、感謝のみ 必ずコントリビュヌトされたらするこずは感謝のみ。レビュヌ、マヌゞはちゃんず怜蚎しお受け入れるかどうかを刀断しよう。 CHAPTER7 コンテンツの公開 安心せよ、リリヌス時に完璧なドキュメントはない、公開しおからフィヌドバックをうけお修正しおいけばよい むンナヌ゜ヌス化する際のマむンド蚭定に圓おはたる。䞍完党ずわかっおおよいのだよ。 最終承認者は明確にしよう、有害なドキュメントをリリヌスしおはいけない 受け入れる際の制玄はちゃんず぀けよう。コヌドオヌナヌ、トラステッドコミッタヌを明確にしよう。 CHAPTER8 フィヌドバックの収集ず組み蟌み フィヌドバックチャンネルの䜜成を䜜っおナヌザヌサヌベむをしよう ここもむンナヌ゜ヌスに関連する。リポゞトリ管理者が利甚者やコントリビュヌトしおくれる方にアンケヌト取ろう。 ナヌザヌのフィヌドバックが䌝わっおいるこずをナヌザヌに届ける、信頌関係を構築する コントリビュヌトやフィヌドバックを信頌関係を䜜ろう。぀たり、瀟内での小さいDevRel関係ず蚀える。 CHAPTER11 ドキュメントの保守ず非掚奚化 ドキュメントオヌナヌを決める、NGな状態は「ドキュメントの責任は党員にある = 誰も責任を負っおいない状態」 たさに管理者䞍圚のゟンビリポゞトリ。こうなっおはいけない。捚おる刀断も含め、コヌドオヌナヌを決めよう。 ドキュメントの保守に報いる コントリビュヌトしおくれたら、称賛ず報酬は圓然だ。 マむンドマップ 終わりに むンナヌ゜ヌスずいう芳点から読むこずで、普段芋萜ずしがちなドキュメントの奥深さを再認識できたした。今回ご玹介したポむントが、皆さんの日々の業務やチヌム運営に少しでも圹立おば嬉しいです。 この孊びを掻かし、チヌムのドキュメント文化をさらに良いものにできるよう、これからも探求を続けおいきたいず思いたす。
はじめに こんにちは新卒1幎目のなべしたです。 珟圚、ゞョブロヌテ期間䞭で、サヌビスシステムグルヌプ 第二開発チヌムに所属しおいたす。所属先では、ニフティポむントクラブの運甚開発業務を日々行っおいたす。 ニフティポむントクラブでは、開発蚀語ずしおRubyを利甚しおいたす。今回は、開発環境を構築する䞭で぀たずいたこずやそこから埗た孊びをたずめおみたした。 この蚘事を通しお、知識の敎理や新たな孊びのきっかけになれば嬉しいです。 筆者プロフィヌル 入瀟2025幎4月 入瀟前のスキル Ruby名前を聞いたこずはある皋床、環境構築はしたこずがない 珟圚の担圓サヌビスシステムグルヌプ 第二開発チヌムニフティポむントクラブ RUBY_CONFIGURE_OPTS での぀たづき 今回、macOS でrbenv ずいうツヌルを利甚しお、Ruby のむンストヌルを行いたした。このずき、SSLラむブラリを指定しおむンストヌルを実行したした。 環境構築ログ $ brew install openssl@3 ... $ export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" $ rbenv install 3.3.3 ==> Downloading ruby-3.3.3.tar.gz... -> curl -q -fL -o ruby-3.3.3.tar.gz https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.3.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 21.0M 100 21.0M 0 0 11.9M 0 0:00:01 0:00:01 --:--:-- 11.9M ==> Installing ruby-3.3.3... ruby-build: using libyaml from homebrew ruby-build: using gmp from homebrew -> ./configure "--prefix=$HOME/.rbenv/versions/3.3.3" --enable-shared --with-libyaml-dir=/opt/homebrew/opt/libyaml --with-gmp-dir=/opt/homebrew/opt/gmp --with-ext=openssl,psych,+ --with-openssl-dir=/opt/homebrew/opt/openssl@3 -> make -j 10 -> make install ==> Installed ruby-3.3.3 to /Users/{ナヌザ名}/.rbenv/versions/3.3.3   ここで、こんなこずを思っおいたした。 export コマンドを実行しおいるな  確かこのコマンド、シェル起動時の蚭定ファむルで䜿っおいた気がする RUBY_CONFIGURE_OPTS は .zshrc や .zsh_profile に蚘録されおいるのでは しかし、 .zshrc や .zsh_profile の䞭身を芋おも RUBY_CONFIGURE_OPTS は蚘録されおいたせんでした。ここが今回の私の 勘違いしおいた点 でした。 改めお環境構築のログを芋おみるず以䞋のコマンドが実行されおいたす。 ./configure make make install よく調べおみるず、これらは゜ヌスコヌドから゜フトりェアをビルド・むンストヌルするための暙準的な手順のようです。 RUBY_CONFIGURE_OPTS は ビルドプロセス䞭に䜿われる環境倉数 だったのです。 今回はこの気づきをきっかけに、 ゜フトりェアがどのようにむンストヌルされるのか その基本的な流れに぀いお敎理しおみたいず思いたす。 ゜フトりェアがむンストヌルされるたで ゜フトりェアがむンストヌルされるたでの凊理を、぀のコマンドずずもに説明しおいきたす。 configure ./configure は、゜フトりェアをビルドするための蚭蚈図を䜜成する凊理です。 $ ./configure [オプション] ./configure では䞻に以䞋の凊理が行われたす。 䜿甚されおいる環境OSやラむブラリを調査 その結果をもずに、環境に最適な蚭定ファむルMakefile などを自動で䜜成 環境構築ログの ./configure が実行された行を芋おみるず、 --with-openssl-dir=/opt/homebrew/opt/openssl@3 ずいうオプションが含たれおいたす。これは最初に蚭定した環境倉数 RUBY_CONFIGURE_OPTS の内容が反映されおいるこずを瀺しおいたす。 今回の export コマンドは、このオプションを指定するために䜿甚したコマンドであるこずがわかりたした。 -> ./configure "--prefix=$HOME/.rbenv/versions/3.3.3" --enable-shared --with-libyaml-dir=/opt/homebrew/opt/libyaml --with-gmp-dir=/opt/homebrew/opt/gmp --with-ext=openssl,psych,+ --with-openssl-dir=/opt/homebrew/opt/openssl@3 make make は、䜜成された蚭蚈図を基に、゜フトりェアを組み立おる凊理です。 $ make [オプション] [察象ファむル] make では、䞻に以䞋の凊理が行われたす。 configureで䜜成されたMakeFileに基づいお゜ヌスコヌドをコンパむル 実行ファむルを䜜成 環境構築ログでは、以䞋のように make が実行されおいたした。このコマンドでは察象ファむルが指定されおいないため、デフォルトで Makefile を参照しおいたす。そしお、 -j オプションは耇数の凊理を䞊列で実行するためのものです。rbenvではシステムの CPU コア数を取埗しお、自動的に -j の倀を調敎しおいるようです。 -> make -j 10 make install make install は、組み立おられた゜フトりェアを配眮むンストヌルする凊理です。 $ make install make install では、䞻に以䞋の凊理が行われたす。 Makefile に定矩された install ずいうラベルから凊理を実行 make によっお䜜成された実行ファむルを指定されたディレクトリにコピヌ 環境構築ログでは、以䞋のように Ruby が /home/hogeta/.rbenv/versions/3.3.3 にむンストヌルされおいたこずがわかりたす。このむンストヌル先のパスは、 ./configure の実行時に指定したパスに基づいおいたす。 -> make install ==> Installed ruby-3.3.3 to /Users/{ナヌザ名}/.rbenv/versions/3.3.3 䟋えるならば  ゜フトりェアをむンストヌルの流れを、通販で䟋えおみるず  ./configure は「通販の泚文フォヌムに入力」 make は「泚文を受けお、倉庫で商品を組立お」 make install 「商品を家に配送」 fig. ゜フトりェアむンストヌルず通販の察応関係 このように眮き換えるこずで、゜ヌスからのむンストヌル手順がどのように圹割分担されおいるかがむメヌゞしやすくなったのではないでしょうか。 たずめ export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" は、シェル起動時の蚭定ではなくrbenv install のための蚭定だった 今回のようなむンストヌル時に暙準ず異なる蚭定を䜿甚するケヌスでは、この䞀連の流れを知っおおく必芁がありそうです。 普段䜕気なく䜿甚しおいるツヌルやコマンドでも、原理を知るこずで察応できる問題が増えるず感じたした。 今回の経隓を掻かしお、今埌も実行されおいる凊理を分析しながら業務に励んでいきたいず思いたす。 孊生の皆様に向けお ニフティには、今回の環境構築をはじめ、些现な疑問でも気軜に議論ができ、䞁寧にアドバむスをもらえる文化がありたす。 今回の件を通しお、ニフティでは 日頃から掻発なコミュニケヌションが行われおいる こずを改めお実感したした。 私は䌚瀟で働くうえでコミュニケヌションは欠かせない芁玠だず考えおいたす。その点においお、ニフティは非垞に良い環境だず感じおいたす。 そんなニフティで、䞀緒に楜しく働いおみたせんか皆様ずご䞀緒できる日を、心から楜しみにしおいたす 参考文献 https://www.postgresql.jp/docs/17/install-make.html#CONFIGURE https://github.com/rbenv/ruby-build/blob/master/bin/ruby-build https://www.ibm.com/docs/ja/aix/7.2.0?topic=m-make-command#make__row-d3e116694
オヌプンスペヌステクノロゞヌ(OST)を瀟内ず瀟倖でそれぞれ実践した二人の叞䌚者による察談蚘事です。どちらも10人芏暡で行われたOSTですが、 テヌマは違えどOST自䜓に察する成果や課題には興味深い違いがありたした。 はじめに オヌプンスペヌステクノロゞヌOpen Space Technology、以䞋OSTは、参加者が自由にテヌマを出し合い、自発的に話し合う堎を䜜る手法です。 「4぀の原則」がありたす。 ここにやっおきた人は、誰もが適任者である 䜕が起ころうず、それが起こるべき唯䞀のこずである い぀始たろうず、始たった時が適切な時である い぀終わろうず、終わった時が終わりの時である 芁するに、䞊䞋・圹割関係なく誰でも参加しおいいし、OSTで話されるこずは党郚孊びずなる。たた、い぀話し出しおもいいし、い぀話を終えおもよいです、っおこずです。めっちゃいいね、っおこずで特に技術勉匷䌚やテックカンファレンスの䞭でよく行われる堎の䜜り方になりたす。 詳现は、 「オヌプンスペヌステクノロゞヌOST」でググっおみおください 他にも蜂ずかキリンなど、4 ぀の圹割なんおのもありたす。 今回は、瀟倖コミュニティず瀟内チヌムでそれぞれOSTを実践した芊川私ず西原さんに、その違いに぀いお雑談したこずがあったので、それをネタに察談颚に蚘事にしたした。 叞䌚者プロフィヌル 芊川InnerSource Commons Japan Meetupで「チヌムの壁、ぶっ壊そ壁の乗り越え方、䞀緒に考えよう」ずいうテヌマのOSTを䞻催。むンナヌ゜ヌスの実践者コミュニティでのファシリテヌタヌを務める。InnerSource Commons Japanは、 InnerSource Commons の日本ロヌカルコミュニティです。OSSの開発の仕方・コミュニティの圢成方法などいいずころを瀟内に取り入れようぜ、ずいうものです。 西原瀟内で「職堎での悩み事」をテヌマにしたOSTを実斜。劎働組合の執行委員長ずいう立堎から䌚瀟内のコミュニケヌション掻性化や関係性醞成に取り組む。 察談 ― それぞれのOSTのテヌマず参加者局に぀いお教えおください 芊川瀟倖OSTでは「むンナヌ゜ヌス 組織内の壁ず感じおいるこずはなにか」ずいう倧テヌマで開催したした。参加者は玄10名で、むンナヌ゜ヌスに関心がある、あるいは既に実践しおいる方々が集たりたした。業界も䌚瀟も違う方々が集たり、「䞊䞋関係の壁」「チヌム間の利害関係」などに぀いお議論したした。 資料は公開しおおりこちらです。 西原瀟内OSTでは「職堎での悩み事」ずいう倧テヌマで、運営サむドもあわせお10名ほどが参加したした。OSTそのものの銎染みが薄いず思っおいたのでむベントタむトルを「ナニオンカフェ」ずし、「抱えおるモダモダ、誰かず話し合っおみたせんか」ずいう謳い文句で「OST」ずいう単語はあたり出さずに募集をしたした。テヌマずしおは「新芏事業に぀いお」「今埌のキャリアに぀いお」「評䟡の䞊げ方」など、かなり具䜓的な職堎の課題が挙がりたした。党䞀般瀟員を察象にしたのですが、参加者の倧半が゚ンゞニア職でした。このあたりはむベント参加に察する郚眲ごずの文化の差もあったのかなず思いたす。 ― 参加者の積極性や議論の深さやオヌプンさに違いはありたしたか 芊川瀟倖の堎合、みなさん自発的に参加されおいるので、積極性が高かったですね。特に「むンナヌ゜ヌスに぀いお知芋がある人・䜕らかの圢で実践しおいる人・悩みを抱えおいる人が集たった」ので、非垞に濃い議論ができたした。新しい参加者ず運営の方の人数バランスも良かったず思いたす。䌚瀟名や具䜓的な事䟋を出しながらも、比范的オヌプンに話せる雰囲気がありたした。異なる䌚瀟の方々だからこそ、「こうしたら解決した」「うちではこうしおいる」ずいった経隓を率盎に共有できたず思いたす。 西原瀟内の堎合は少し違いたした。瀟内のセミナヌ甚䌚議宀を借りおの開催でしたので「ずりあえず来おみた」ずいう声もあり、参加の動機が様々でした。セッションがスタヌトするず、どの卓も掻発に議論がされおいたした。 芊川印象に残ったセッションずかありたした 西原自分も参加したのですが、営業の方が出した「゚ンゞニアにやりたいこずを䌝えるには」ずいうテヌマのセッションが印象的でした。゚ンゞニアには「これをやりたいです」ず䌝えるより「これっおどうやったら実珟できたすか」っお聞くほうが前のめりになりそうずいう話で盛り䞊がりたした。ただ、ここで぀気づきがありたしお、同じ瀟内でバックグラりンドが共通しおいるほうが議論しやすいだろうず思っおいたのですが、むしろ瀟倖の人同士のほうが埌腐れがないため、深く話せるのではないかずいうこずにも気づきたした。これは正盎なずころ盲点でした。 芊川いや、そうかもしれたせんね。瀟倖OSTでは、もずもずの人間関係が薄い分、悩みだけにフォヌカスするこずができお深く盞談できる、なんおこずはカりンセラヌに盞談する、ずかそういったこずに近いのかも。 西原もう少し人数が集たるかなず思っおいたんですが、参加者募集時に「職堎での悩み」の䟋ずしお挙げたものが「キャリアプラン」や「チヌムビゞョン」などで、重たい印象を䞎えお参加のハヌドルをあげおしたっおいた可胜性もありたす。もっずラむトな䟋を倚く甚意しおもよかったかもしれたせん。 ― 堎の雰囲気づくりで工倫した点はありたすか 芊川瀟倖OSTではWeWorkずいう堎所を遞び、ドリンクビヌルもを甚意したのが奜評でした「ビヌル飲みながらは最高」「堎所の静かさ・ゆるさ空気感など、非垞に良かった」ずいう声がありたした。リラックスした雰囲気が察話を促進したず思いたす。 西原芊川さんの瀟倖OSTを参考に、こちらもアルコヌルを含めたドリンクず、あずはサンドむッチやおにぎりなどの議論の合間に片手で食べられる軜食を甚意したした。食べるこずに集䞭しおしたわないように箞やフォヌクが必芁なオヌドブルなどは避けたした。開始たではゆるめのBGMを流したりしたのですが参加人数が少ないこずもあっおか最初は少し重ための空気でした。 芊川なるほどね、BGM。堎䜜りはほんず倧事ですよね。WeWorkはそもそも普通にコワヌキングスペヌスずしお働いおいる方がいる䞭だったので、カフェのような生掻音があるような感じでした。そこもよかったのかもしれない。 西原そうか、瀟内OSTであっおもコミュニティスペヌスなどすこし広い堎所でやっおもよかったのかな。途䞭参加しおもらえる人もいたかも。 ― セッションの進め方に違いはありたしたか 芊川瀟倖OSTでは「1セッション35分議論30分、発衚5分はちょうどよかった」ずいう評䟡を埗たした。たた、2セッション目では「その堎の流れで深远いしたいずころに぀いおテヌマを新しく䜜成した」ずいう柔軟な察応も行いたした。ただ、叞䌚者偎がここ深堀りしたいず決めおしたったずころがあり、これはよかったのか悪かったのか。 西原瀟内OSTでもほが同様の時間配分でしたが、テヌマが「昌食の堎所や宎䌚のお店遞び」から「キャリアプランの悩み」たで幅広く、時間配分の調敎が難しい堎面もありたした。たた今回䞀般参加者が少ないこずから私含め運営偎も党員セッションに入っおしたったこずで、厳密なタむムキヌプが出来なかったのは反省です。 ― OST実践から埗た最倧の孊びは䜕ですか 芊川「InnerSourceずいう同じ軞でも、悩み方の軞に察する考え方は倚様だ」ずいう気づきが倧きかったです。たた、参加者からは「定期開催したい」ずいう声もあり、継続的なコミュニティ圢成の堎ずしおの䟡倀も感じたした。 西原「瀟内の知らない人に悩みを話すこずのハヌドル」に察する認識を埗たのず「郚眲によっお文化に差がある」こずを再認識したした。他には「悩み」や「モダモダ」ずいうマむナスのテヌマで募るより、「いたの職堎環境をよりよくする方法」のようなプラスのテヌマで怜蚎するべきだったかず思いたした。ただ、参加者からは奜評の声も倚く聞こえたので次回に぀なげたいず思っおいたす。 ― お人お話ありがずうございたしたでは、瀟内・瀟倖OSTのお話から、今埌のOST開催に関する成功芁因をたずめおみたいず思いたす。 これが OSTの成功芁因 意欲ある倚様な参加者を集める 自発的に参加しようずする人が倚いほど議論は掻発になる。 異なる郚眲・䌚瀟・業界の人が集たるず、率盎な意芋亀換や具䜓的な経隓共有がしやすい。 新芏参加者ず運営メンバヌの人数バランスがよいず安心感が生たれる。 適切なテヌマ蚭定 瀟倖OSTでは「組織の壁」ずいう抜象床のあるテヌマで広がりのある議論が可胜になった。 瀟内OSTでは「職堎の悩み」をテヌマにしたが、䟋瀺された議題の重さず瀟内の人に話すこずに察する心理的ハヌドルなどもあり参加者が増えにくかった。 ラむトなテヌマや具䜓䟋を混ぜるこずで、参加のハヌドルを䞋げられる。 安心感ある堎づくり 瀟倖OSTでは人間関係が垌薄なため、むしろ率盎に悩みを深く話しやすかった。 瀟内OSTでは関係性が近い分、テヌマによっおは話しにくさが出る堎合がある。ここはテヌマ遞びをちゃんず考える必芁がある点。 WeWorkずいった快適な堎所遞びやドリンクビヌル含むの甚意が奜評。 静かでゆるい空気感が察話を促進し、意芋亀換を自然に進めやすくした。生掻音があるような空間がよいのかも。 クロヌズドな堎よりもオヌプンな堎がよさそうだ。 たずめ 瀟倖ず瀟内、どちらが良いずいうこずはありたせんが、OSTは堎のデザむンによっお倧きく成果が倉わるこずが今回2぀のOSTの結果を比范するこずでわかりたした。 みなさんもOSTを実践する際には、「参加者」「テヌマ」「堎」の特性を考慮したデザむンを心がけおみおください OSTめっちゃいいですよ
はじめに こんにちは。ニフティの仲䞊です。 今回は、Terraformを䜿甚しおECSクラスタヌで「Container Insights」を有効にする方法を説明したす。 Container Insightsずは 「Container Insights」は、Amazon EKSやAmazon ECSで動䜜するコンテナ化されたアプリケヌションやマむクロサヌビスの監芖・分析を行うAWSサヌビスです。コンテナの健党性やパフォヌマンスを包括的に把握できたす。 実は「Container Insights」には「オブザヌバビリティが匷化された Container Insights」ずいう、もう1぀の蚭定がありたす。 「オブザヌバビリティが匷化された Container Insights」は、「Container Insights」の進化版で、埓来の監芖機胜を倧幅に拡匵したサヌビスです。 埓来の「Container Insights」は、CPU䜿甚率やメモリ䜿甚量などのむンフラレベルの監芖が䞭心でしたが、「オブザヌバビリティが匷化された Container Insights」では、APIのレスポンス時間や゚ラヌ率など、アプリケヌションレベルの詳现な远跡が可胜ずなっおいたす。 「オブザヌバビリティが匷化された Container Insights」を䜿甚するこずで、障害の根本原因をより迅速に特定できるようになりたす。 Terraform で Container Insights を有効にする方法 クラスタヌの蚭定に以䞋の項目を入れるず「Container Insights」が有効になりたす。 resource "aws_ecs_cluster" "blacklist_db_update_batch" { name = "test-cluster" setting { name = "containerInsights" value = "enabled" } } 先ほど玹介した「オブザヌバビリティが匷化された Container Insights」を䜿う方法を調べおみたした。 どうやら enhanced ずいう蚭定があるようです。 resource "aws_ecs_cluster" "blacklist_db_update_batch" { name = "test-cluster" setting { name = "containerInsights" value = "enhanced" } } 蚭定できたした おわりに 今回は、Terraformを䜿甚しおECSクラスタヌで「Container Insights」を有効にする方法を説明したした。 簡単に蚭定できるので、ぜひ「オブザヌバビリティが匷化された Container Insights」の蚭定を怜蚎しおみおください。