ニフティ株匏䌚瀟のブログ - TECH PLAY

TECH PLAY

ニフティ株匏䌚瀟

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

å…š529ä»¶

はじめに 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」の蚭定を怜蚎しおみおください。
はじめに 皆さんこんにちは 新卒䞀幎目の宮村です 珟圚の業務では、䞻にOpenID Connect(OIDC)を䜿甚した基幹システムを運甚しおいたす。 そのため今回は、業務を通じお孊んだOIDCの基瀎に぀いお発信しおいきたいず思いたす。 この蚘事の前提 今回のハンズオンはWindowsのPowerShellを前提にしおいたす。 おそらく、MacやLinuxでも動䜜するず考えおおりたすが、保蚌はできたせん。 以䞋の蚘事等を閲芧し、OIDCの抂芁がわかっおいる前提で説明したす。 https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe   ハンズオン準備 今回䜿甚する゜ヌスコヌドのクロヌン たず、準備ずしお今回䜿甚するOIDCのサヌバヌ django-oidc-provider をGit cloneし、exampleディレクトリに移動したす。 $ git clone https://github.com/juanifioren/django-oidc-provider.git $ cd django-oidc-provider/example   このexampleディレクトリには、実際にdjango-oidc-providerを導入した際のOpenID Provider(OP)の実装䟋がありたす。 Dockerコンテナの䜜成 exampleが少し叀くそのたたでは動かなかった点ず今回のハンズオンの郜合䞊、DockerFileの内容を以䞋に倉曎しおください。 ※あくたでテストであるため、スヌパヌナヌザヌ情報をファむルに盎曞きしおいたす。 FROM python:3.10 WORKDIR /app COPY . /app RUN pip install --upgrade pip RUN pip install --no-cache-dir -r requirements.txt RUN python manage.py migrate RUN python manage.py creatersakey # 環境倉数でデフォルトのスヌパヌナヌザヌ情報を蚭定 ENV DJANGO_SUPERUSER_USERNAME=admin ENV DJANGO_SUPERUSER_EMAIL=admin@example.com ENV DJANGO_SUPERUSER_PASSWORD=admin # スヌパヌナヌザヌを䜜成既存の堎合はスキップ RUN python manage.py createsuperuser --noinput || echo "Superuser already exists" EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]   以䞋のコマンドで実際に起動しおみたしょう $ docker build -t django-oidc-provider . $ docker run -d -p 8000:8000 django-oidc-provider   http://localhost:8000 で以䞋の画像が確認出来たら成功です。 テストClientの远加 Create your clients をクリックしたしょう。 ここでいうclientはOPを䜿甚するクラむアントのこずを指し、Relying Party(RP)ずも呌ばれたす。 クリック埌、ログむン画面が衚瀺されるため、ID、パスワヌドどちらも admin を入力したしょう。 ログむン埌は 巊サむドバヌのClientsの隣 にある +Add をクリックしたす。 その埌、以䞋を入力したす。それ以倖はそのたたでOKです Name: テスト Response types code id_token id_token token Redirect URIs: http://example.com Scopes: openid profile email address phone 入力䟋 この埌、Saveをクリックし、生成したclientを確認するず以䞋のようにClient IDずClient Secretが自動生成されたこずが確認できたす以䞋はあくたで䟋です。 これらの情報は、リク゚ストを送信したclientが正芏のclientであるこずをOPが確認するために䜿甚したす。 この埌のハンズオンで䜿甚するため、これらの情報をメモしおおきたしょう。 テストナヌザの䜜成 巊サむドバヌのUsersの隣 にある +Add をクリックしたす。 するず、以䞋の画面に遷移するため、以䞋の情報を入力しSaveをクリックしたす Username: test_user01 password: test_user01 するず、以䞋の画面ぞ遷移するため First name: user01 Last name: test Email address: example@google.com ず入力しSaveをクリックしたす。 これで、䞋準備は完了したした。 ハンズオン 実際に蚭定したOPに察しおログむンしおみたしょう。 今回は、OIDCのシヌケンスの䞭で最も䞀般的なAuthorization Code Flowで詊しおみたす。 ログむンAuthorization Request 初めにブラりザの シヌクレットブラりザモヌド を立ち䞊げ、以䞋のURLを匵り付けおください。 http://localhost:8000/authorize/?client_id=【先ほど生成されたClient ID】&redirect_uri=http://example.com&response_type=code&state=123456&scope=openid+profile+email   このURLは、OPに察しお認可コヌドの発行を芁求するAuthorization Requestです。 ここでは、 /authorize ゚ンドポむントを指定しおいたすが、゚ンドポむントがどのURLに存圚するかの情報は、 .well-known/openid-configuration を参照すれば知るこずができたす。 実際にブラりザでアクセスしおみるず、今回䜿甚する authorization_endpoint 等のURLが蚘茉されおいるのが確認できたす。これはOIDCのDiscovery発芋機胜ず呌ばれたす。 以䞋に䞻芁なパラメヌタの詳现を䞀郚抜粋しお説明したす。 client_id : client(RP)の識別子 redirect_uri : 認蚌終了埌にリダむレクトされるURI。 response_type : 認蚌埌にどの情報を返すかAuthorization Code Flowだず code を指定 scope : ClientがOPに芁求したいナヌザヌ情報の範囲プロフィヌル、メヌルアドレスなどを指定したす。ここで芁求したスコヌプに察応する情報が、埌のUserInfoレスポンスで取埗できたす。 匵り付けた埌Enterを抌すず、ログむン画面が衚瀺されるため、先ほど䜜成したナヌザでログむンしたす。 以䞋の画面ぞ移動したす。 この画面は、Clientに察しお以䞋の情報を枡すこずをナヌザに察しお蚱可を求めおいるこずを意味したす。 ここではAcceptをクリックしたす。 その埌、example.comにリダむレクトしたす。 リダむレクトした際のURLパラメヌタに存圚するcodeは認可コヌドのこずを衚し、トヌクンの発行に䜿甚したす。 この認可コヌドを䜿甚しお、実際にトヌクンを発行しおみたしょう。 以䞋のコマンドをPowerShellに匵り付けたしょう。 このコマンドはToken Requestを送信するものであり。OPに察しおトヌクンの発行を申請したす。 $ curl -s -X POST -H "Cache-Control: no-cache" -H "Content-Type: application/x-www-form-urlencoded" "http://localhost:8000/token/" -d "client_id=【先ほど生成されたClient ID】" -d "client_secret=【先ほど生成されたClient Secret】" -d "code=【発行された認可コヌド】" -d "state=123456" -d "redirect_uri=http://example.com" -d "grant_type=authorization_code"   するず、以䞋の䟋のようなレスポンスが返っおきたす。 { "access_token": "df6e0afa50e14a879f151feda46295b7", "refresh_token": "d6649365913f4c56abefe3f2b8b8732d", "token_type": "bearer", "expires_in": 3600, "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk1YjBmY2I5NDI4NTI1YjM0MGRlZWM4ZjJlNTFhYmNlIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJzdWIiOiIxIiwiYXVkIjoiOTI0NDIyIiwiZXhwIjoxNzU0OTgxMTkwLCJpYXQiOjE3NTQ5ODA1OTAsImF1dGhfdGltZSI6MTc1NDk3NjE0MiwiYXRfaGFzaCI6ImlkRHRjVjdvYzl4Ny1yTFNoSTg5bHcifQ.fzlqjsHJycYrSx2EsGjsGsgLZC3z4mRVpKPATG0D_mU6bDD7ZLv4G3Sk5kXmibBekaLR5zBIUr84ZmQ77qo3CdARxLOn7rB4CLE3-9d-JEoQpwI9uHac3iQXdx6HVN2zBQJjm6CPkx8t0Z9-d1ErRzJiAeiJChPq4JbxsmtFJzgFwssdKeUdMwgsjR64wIY8uP9KV9NFG3X0vKfnAVSPdsp9QpfV68xkqwmhnotKHShSbDYsNPOAIGvryCxyb74h87BEVxk8OHmg79SsyXkf2eBpaA9ykg43EK-tMh2MZg3dfLqoFb0ZbUYgojJACMBsXAo9_WdF5MeEUczMsSs8HQ" }   䞻芁な郚分を抜粋するず、 Access Token : ナヌザ情報を取埗するために䜿甚されるトヌクンです。 Refresh Token : ID TokenずAccess Tokenを再生成する際に䜿甚されるトヌクンです。 IDトヌクン は: OPが正芏なものであるこずず、ナヌザヌが認蚌されおいるこずを蚌明するトヌクンです。 IDトヌクン怜蚌 この埌、ID Tokenの䞭身を怜蚌し、OPが正芏なものであるか確認したす。今回は手動でIDトヌクンを怜蚌したしょう。 以䞋のWebサむト(jwt.io)にID Tokenを匵り付けおみたしょう。 https://www.jwt.io/ja 匵り付けた埌、以䞋の画面が右偎衚瀺されるはずです。 䞻芁な郚分を以䞋に抜粋したす。 ヘッダヌ郚分 alg : 眲名アルゎリズム kid : 眲名の怜蚌に䜿甚する鍵のid ペむロヌド郚分 iss : ID Tokenの発行元でURLが衚瀺されたす。 sub : ナヌザの識別子IDを瀺したす。 aud : ID Tokenを䜿甚するClientを瀺したす。 exp : ID Tokenの有効期限Unix time at_hash : アクセストヌクンをハッシュ化したもの。アクセストヌクンが正しいものかどうかを怜蚌するために䜿甚 これらの倀を実際のものず芋比べるず正しいものであるこずを確認できるはずです。   たた、IDトヌクンは . で区切られた3぀の郚分ヘッダヌ・ペむロヌド・眲名から構成されおおり、最埌の郚分が眲名です。 http://localhost:8000/jwks にアクセスするず眲名の怜蚌に䜿甚する公開鍵の情報がありたす。 IDトヌクンの眲名は、ヘッダヌずペむロヌドを . で連結したものから蚈算したハッシュ倀を、OPが持぀秘密鍵で暗号化したものです。RP偎では、OPの公開鍵を䜿っおこの眲名を 怜蚌 したす。これにより、トヌクンが改ざんされおおらず、確かにそのOPから発行されたものであるこずを確認できたす。詳しい怜蚌プロセスは耇雑なため省略したす。 ※䜙談ですが、jwt.ioの仕様䞊ID Tokenから眲名の怜蚌に必芁な公開鍵を、巊䞋に自動で割り出しおくれたす。実際に、 http://localhost:8000/jwks の情報ず比范しおみるず䞀臎するはずです。 UserInfo Request IDトヌクンの怜蚌が終了した埌、実際にナヌザ情報を取埗したす。 以䞋のコマンドをPowerShellで叩いおください。 $ curl -s -X GET -H "Authorization: Bearer 【発行されたアクセストヌクン】" "http://localhost:8000/userinfo/"   するず、Authorization RequestのScopeで指定した、profile, emailの情報が取埗できたす。 { "sub": "2", "given_name": "user01", "family_name": "test", "nickname": "test_user01", "email": "example@google.com" }   最埌に OIDCはだいたい、このような流れずなっおいたす。 今回は䞀連の流れを手䜜業で行いたしたが、実際䜿甚する際は、OIDCのClient甚ラむブラリを䜿甚するため、OPのアドレスissパラメヌタやClient ID, Client Secretさえ指定しおしたえば、あずはほがすべお自動でやっおくれたす。
抂芁 こんにちは。ニフティの山田です。 2025/07/17に、ECS組み蟌みBlue/Greenデプロむがリリヌスされたした。 https://aws.amazon.com/jp/blogs/news/accelerate-safe-software-releases-with-new-built-in-blue-green-deployments-in-amazon-ecs/ 埓来、ECSの組み蟌みデプロむ機胜はロヌリングアップデヌトにしか察応しおおらず、Blue/Greenデプロむを行うためにはCodeDeployを䜿甚する必芁がありたした。 今回の倉曎によりECSだけでBlue/Greenデプロむが可胜になったほか、CodeDeployによる制玄がなくなりたした。 これらの倉曎点に぀いお解説しおいきたす。 ALB + ECS構成の堎合に埓来ず比べおどうなるかを解説したす CodeDeploy Blue/Greenデプロむず比べお倉わるこず 単にCodeDepoloyが芁らなくなる、ずいう点以倖にも仕様の違いはいく぀かありたす。 切り替え方法 (䞊蚘はテストリスナヌ(ルヌル)有効時のパタヌンですが、無効時はテストトラフィックのシフトはスキップされたす) 基本的な動䜜原理はCodeDeployのものず同じですが、以䞋の点で異なりたす。 本番・テストトラフィックの管理がリスナヌ単䜍からリスナヌルヌル単䜍に倉わった CodeDeploy Blue/Greenでテスト甚アクセスを行うにはポヌトを倉えるしかなかった ルヌルに倉わったこずにより、ヘッダなどの条件でも切り替えられるようになった 垞にBlue/Green䞡方のタヌゲットグルヌプぞの参照を保持するようになった CodeDeploy Blue/Greenでは䜿わない方のタヌゲットグルヌプぞの参照は倖れおいた ECS Blue/Greenでは重み付きで䞡方保持するようになった ラむフサむクルフック CodeDeploy同様に、決められたタむミングにラむフサむクルフックが蚭定されおおり、Lambdaを呌び出しお凊理を実行、必芁に応じおデプロむを停止させるこずができたす。 フックの皮類 名前は異なっおいたすが、同等+αのフックが甚意されおいたす。 CodeDeploy Blue/Green BeforeInstall / AfterInstall AfterAllowTestTraffic BeforeAllowTraffic / AfterAllowTraffic ECS Blue/Green PRE_SCALE_UP / POST_SCALE_UP TEST_TRAFFIC_SHIFT / POST_TEST_TRAFFIC_SHIFT PRODUCTION_TRAFFIC_SHIFT / POST_PRODUCTION_TRAFFIC_SHIFT REONCILE_SERVICE フック戻り倀の皮類 フックで呌び出されたLambdaが返すこずのできる倀ずしお、 IN_PROGRESS が远加になっおいたす。 SUCCEEDED 成功(デプロむ続行) FAILED 倱敗(デプロむを停止しおロヌルバック) IN_PROGRESS 実行䞭 IN_PROGRESSを返した堎合、30秒埌にたたLambdaが呌び出されたす。 別途ロングランの確認(ex. E2Eテスト)を呌び出し、その終了を埅぀、ずいった堎合に䜿甚できたす。 CodeDeployの制玄からの開攟 CodeDeployを䜿甚する堎合、ECSのDeploymentControllerずしお CODE_DEPLOY を指定する必芁がありたす。このモヌドではECS serviceの保぀機胜が制限されるずいう問題がありたした。 ex) networkConfigurationなど、䞀郚のECS serviceの蚭定を盎接曎新できなくなり、CodeDeployでのデプロむで曎新する必芁がある このせいでデプロむ偎でサヌビス定矩を管理する必芁があった ECSが持぀サヌキットブレヌカヌの機胜は䜿えず、CodeDeploy偎の機胜で代替する必芁がある ECS Service Connectが䜿えない ECS Blue/Greenでは ECS の指定になるため、この制玄がなくなりたす。 以䞊、基本的にはECS Blue/Greenの方が䜿い勝手が良くなっおいたす。 AWS公匏ずしおもECS Blue/Greenを掚奚しおおり、AWSコン゜ヌル䞊では既にECSサヌビスの新芏構築時にCodeDeployが遞択できなくなっおいるため、今埌の構築にはECS Blue/Greenを䜿いたいずころです。 (埌述の泚意点を芁確認)  Terraformでの蚭定 ECS Blue/Green察応は AWS Provider v6.4.0から入っおいたすが、䞍具合があるためv6.6.0以降を䜿っおください https://github.com/hashicorp/terraform-provider-aws/issues/43552 考慮事項 ECS Blue/Greenではリスナヌルヌル単䜍でトラフィックを管理するようになったのだが、これによりTerraformでは蚭定できないパタヌンが発生しおしたっおいる問題がありたす。 リスナヌにルヌルが1぀しかない堎合、以䞋のように蚭定しおきたかず思いたす。 resource "aws_lb_listener" "listener" { ... default_action { type = "forward" target_group { ... } } } ここで default_action でデフォルトリスナヌルヌルのアクションを定矩したすが、このルヌルのARNは Terraformで取埗するこずができたせん 。ECS Blue/Greenの蚭定時にARNが必芁になるため、この蚭定は行えないこずになりたす。 なので、default_actionはダミヌの蚭定ずしお実質䜿甚せず、別途リスナヌルヌルを定矩する必芁がありたす。 なお、以䞋のようにdataで取埗できないかも怜蚌したしたが、priorityの倀にdefaultを受け付けず倱敗したした。 ata "aws_lb_listener_rule" "default" { listener_arn = aws_lb_listener.listener.arn priority = "default" } 蚭定 ALB resource "aws_lb_listener" "listener" { ... # 基本的にこのルヌルには来ない想定 default_action { type = "fixed-response" fixed_response { content_type = "text/plain" message_body = "Not Found" status_code = "404" } } } # ARNを取埗できるように、別途リスナヌルヌルを甚意 # テスト甚ルヌルを甚意する堎合は、別途もう1぀䜜る resource "aws_lb_listener_rule" "prd" { listener_arn = aws_lb_listener.listener.arn priority = 100 action { type = "forward" # CodeDeployず異なり、2぀のTGを䞡方登録しおweightで制埡する forward { target_group { arn = aws_lb_target_group.blue.arn weight = 100 } target_group { arn = aws_lb_target_group.green.arn weight = 0 } } } # default_action代わりに䜿う堎合は、必ずヒットする条件にしおおく # 他のルヌルがある堎合はpriorityずあわせお芁調敎 condition { path_pattern { values = ["*"] } } } 䞊蚘考慮事項を螏たえ、 default_action をダミヌにしお別途リスナヌルヌルを甚意 CodeDeployず異なり、タヌゲットグルヌプを2぀ずも登録しおおく必芁あり タヌゲットグルヌプ自䜓の蚭定は埓来ず倉わらないので割愛 ECS resource "aws_ecs_service" "service" { ... deployment_controller { type = "ECS" } deployment_configuration { strategy = "BLUE_GREEN" bake_time_in_minutes = 1 # 切り替え埌にGreen環境を残しおおく時間(分)、芁調敎 } deployment_circuit_breaker { enable = true rollback = true } network_configuration { # ここは倉わらず } load_balancer { target_group_arn = aws_lb_target_group.blue.arn container_name = "app" container_port = 8080 advanced_configuration { alternate_target_group_arn = aws_lb_target_group.green.arn production_listener_rule = aws_lb_listener_rule.prd.arn # テスト甚リスナヌルヌルを甚意する堎合 # test_listener_rule = "<テスト甚リスナヌルヌルARN>" role_arn = "<Blue/Green切り替え甚のARN>" } } lifecycle { ignore_changes = [ task_definition, desired_count ] } depends_on = [ "<ALB>" ] } 埓来ずの䞻な違い  deployment_controllerを type = ECS に蚭定したうえで、deployment_configurationで strategy = BLUE_GREEN を蚭定するこずでECS Blue/Greenの蚭定になる load_balancerの蚭定に advanced_configuration が増える alternate_target_group_arn: Green偎のタヌゲットグルヌプARN production_listener_rule: 本番甚リスナヌルヌルARN test_listner_rule: テストリスナヌルヌルARN role_arn: Blue/Green切り替えに䜿われるRoleのARN(別途䜜成が必芁) 必芁なポリシヌ Assume Role Policy { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToECSForInfrastructureManagement", "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } Policy AmazonECSInfrastructureRolePolicyForLoadBalancers 䞭身 { "Version": "2012-10-17", "Statement": [ { "Sid": "ELBReadOperations", "Effect": "Allow", "Action": [ "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth" ], "Resource": "*" }, { "Sid": "TargetGroupOperations", "Effect": "Allow", "Action": [ "elasticloadbalancing:RegisterTargets", "elasticloadbalancing:DeregisterTargets" ], "Resource": "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*" }, { "Sid": "ALBModifyListeners", "Effect": "Allow", "Action": "elasticloadbalancing:ModifyListener", "Resource": [ "arn:aws:elasticloadbalancing:*:*:listener/app/*/*/*" ] }, { "Sid": "NLBModifyListeners", "Effect": "Allow", "Action": "elasticloadbalancing:ModifyListener", "Resource": [ "arn:aws:elasticloadbalancing:*:*:listener/net/*/*/*" ] }, { "Sid": "ALBModifyRules", "Effect": "Allow", "Action": "elasticloadbalancing:ModifyRule", "Resource": [ "arn:aws:elasticloadbalancing:*:*:listener-rule/app/*/*/*/*" ] } ] }   参考: Amazon ECS infrastructure IAM role for load balancers (EFSを぀けたり、Service Connectを぀けたりしおいる堎合は远加のポリシヌが必芁なので泚意) 埓来はecs_serviceのほずんどの項目を ignore_changes で無芖する必芁があったが、その必芁はなくなる デプロむで倉わるtask_definition、オヌトスケヌルで倉わるdesired_countだけignoreすればよい serviceはすべおTerraformで管理する圢にできそう もちろん埓来同様の管理方法にしおもよい その他 デプロむ時のRole(or User)に以䞋のポリシヌが必芁 { "Version": "2012-10-17", "Statement": [ { "Action": "iam:PassRole", "Effect": "Allow", "Resource": ["{䞊蚘role_arnに指定したarn}"], "Condition": { "StringEquals": {"iam:PassedToService": "ecs.amazonaws.com"} } } ] } CodeDeploy Blue/Greenからの切り替え 公匏に移行方法が解説されおいたす。 が、皌働䞭のシステムを移行させるのは正盎困難だず思った方が良いです。 前述のように構成が䞀郚倉わっおおり、デプロむ前に倉曎しなければならない 切り戻しができない deploymentControllerをCODE_DEPLOY → ECSにはできるが、逆は䞍可胜 切り戻せないのが臎呜的なのでむンプレヌスでのアップデヌトは避けたほうが良く、やるならALB+ECSのセットをもう1぀䜜っお切り替えるのがよいでしょう。 泚意事項 リスナヌルヌルのforward以倖のアクションが消滅する 2025/08/01時点で本事象に぀いお暫定察応され、forward以倖のアクションが蚭定されおいるず デプロむが倱敗する ようになりたした Blue/Greenデプロむ察象ずなるリスナヌルヌルには通垞、forwardアクション1぀だけが぀いおいる状態になっおいるはずです。 䞀方、 authenticate-oidc のように認蚌を付けた堎合、アクションは2぀になりたす。 ex) Terraformでの䟋 resource "aws_lb_listener_rule" "prd" { ... action { type = "authenticate-oidc" ... } action { type = "forward" ... } } この状態でBlue/Greenデプロむを行うず、 forward以倖のactionが消滅したす 。䞊蚘ではauthenticate-oidcのアクションが消えおしたいたす。 CodeDeploy Blue/Greenでは保持しおくれるので、ECS Blue/Greenのみで発生する事象です。 Canaryリリヌスが未実装 CodeDeployず異なり、リリヌス戊略を遞択するパラメヌタが存圚せず、Canaryリリヌスができたせん。 そのうち実装されそうではありたすが、珟段階では䞀括リリヌスしかできたせん。 ecspressoの取り扱い デプロむにecspressoを䜿甚しおいる堎合のみ圱響したす。 ECS Blue/Greenに移行するこずにより、サヌビス定矩を党おTerraformで管理できるようになり、デプロむでの曞き換えが䞍芁になりたした。぀たり、タスク定矩のみのデプロむでよくなったずいうこずになりたす。 䞀方でecspressoはサヌビス定矩・タスク定矩をセットで管理するこずを前提ずしおおり、この恩恵を受けるこずができたせん。䞀応タスク定矩のみでの実行は可胜だが想定した䜿い方ではなく、サポヌト倖ず明蚀されおいたす。 https://github.com/kayac/ecspresso/issues/871 このため、 サヌビス定矩をデプロむ偎で管理する(Terraform偎で倉曎しない)運甚を継続する ecspressoでのデプロむをやめる サポヌト倖ず知り぀぀(自己責任で)䜿う の3択を迫られるこずずなりたす。 おわりに 今回は、2025/07/17にリリヌスされた、ECS組み蟌みBlue/Greenデプロむに぀いお解説したした。 参考になれば幞いです。
この蚘事は、リレヌブログ䌁画「25新卒リレヌブログ」の蚘事です。 はじめに こんにちは。新卒1幎目の倧村です。 先日、初めおfirewalldずいうツヌルに觊れたした。 これを䞀般的なACLず同じように送信元アドレス(sources)に぀いお蚭定したら、意図しないパケットが通過しおしたい蚭定に悩たされたした。 今回なぜこのような挙動になったのか、想定通り動䜜させるにはどのような蚭定にすれば良いかに぀いお、この経隓を螏たえたうえで、firewalldに始めお觊れる人に向けおたずめたいず思いたす。 筆者プロフィヌル 入瀟時期: 2025幎4月 入瀟前のスキル: ネットワヌク, Linux 珟圚の担圓: ISPオペレヌション・OAチヌム 今回どのような蚭定を投入しおいたのか あるむンタフェヌス(ä»®: eth1)においお、IPアドレス(ä»®: 192.0.2.1)からのみサヌビス(ä»®: 22/tcp)を蚱可するルヌルを远加するこずになりたした。 このずき、私は以䞋のような蚭定に倉曎したした。 意図ずしおは”eth1に到達したパケットに぀いお、送信元IPアドレスが192.0.2.1、宛先ポヌトが22/tcpなら蚱可”ずいった具合です。 しかし、実際の挙動ずしおは、 192.0.2.1以倖のホストもアクセス可胜 ずなりたした。 firewalld基本ずACLずの違い なぜこのような挙動になったのかの前に、たずfirewalldがどのよう動䜜するかを玹介しようず思いたす。 たず、firewalldは、倚くの人が觊れおきたであろう”プロトコル、IPアドレスずポヌト番号の送信元や宛先、蚱可/拒吊のみでルヌルを蚘述するACL”ずレむダが異なるものです。 ACLむメヌゞ図 firewalldは独自の抂念に基づいお蚭定し、䞊蚘のようなルヌルを生成するものであるずいう認識が重芁になりたす。 䞀般的なACLは、むンタフェヌスが䞭心であり、むンタフェヌスごずにルヌルを远加しおいくかず思いたす。 䞀方、firewalldは、” ゟヌン “ずいうものが䞭栞ずなっおおり、このゟヌンにむンタフェヌスや送信元IPアドレスを远加しおいきたす。 このゟヌンずは、そのむンタフェヌスや送信元IPアドレスがどの皋床信頌できるか、どのようなルヌルでパケットを通過させるかのプロファむルのようなものです。 firewalldにデフォルトで存圚するゟヌンの皮類 1 パケットが到達するず、送信元IPアドレス、次にむンタフェヌスの順で先にマッチしたゟヌンに割り振られたす 2 。 最初に送信元IPアドレスがマッチするか刀定する 1でマッチしなければ、次に受信したむンタフェヌスで刀定 たたゟヌンには、通過が可胜なポヌト番号やプロトコル、埌述するリッチルヌルを割り圓おられたす。 最初の蚭定の問題点 ACLでは送信元IPアドレスは蚱可(拒吊)のルヌルの䞀郚なため、同様だず認識しおいたした。 しかし、firewalldにおいおの送信元IPアドレスは、ゟヌンの振り分けのためのルヌル 3 です。 今回のケヌスは、sourcesにマッチしなくおも、interfacesにマッチしおしたい、publicゟヌンで評䟡されるようになったため、アクセスが可胜ずなった蚳です。 では、意図した通りの動䜜をさせるにはどのようにするか。 私は次のようにリッチルヌルを䜿甚しお蚭定を倉曎したした。 リッチルヌルでは、ACLのルヌルず䌌たような蚭定方法で、送信元/宛先のIPアドレス、ポヌト番号、プロトコルの組み合わせで蚱可/拒吊が可胜です。 今回の芁件では、”192.0.2.1からのSSH”を蚱可が芁件なため、以䞋のようなリッチルヌルを远加したした。 これで意図したように192.0.2.1からのみSSHが通るようになりたした。 firewalldで蚭定するには firewalldを䞊手く蚭定するには、たずfirewalldのアプロヌチを理解するこずが倧切です。 むンタフェヌスや送信元アドレスでゟヌンに振り分け、そのゟヌンでパケットを通過させるかを決定したす。 この仕組みを理解したうえで、通過させたいルヌルを宛先ポヌト番号やリッチルヌルなどに萜ずしこむこずが鍵になるかず思いたす。 たずめ firewalldにおけるsourcesは、䞀般的なACLのような”蚱可/拒吊するIPアドレス”の蚭定ではありたせんでした。 sourcesはゟヌンを遞択するための蚭定項目です。 もし、ACLのような蚭定を远加するのであれば、リッチルヌルを䜿甚するこずで可胜ずなりたす。 【終わりに】 孊生の皆様に向けお ただ入瀟しお間もないですが、ニフティには、成長・挑戊を支えおくれる仕組みが敎っおいるず感じおいたす。 制床は こちら で玹介されおいるものや無料で䜿えるUdemyなど数倚く揃っおいたすし、入瀟埌の 研修 も魅力の䞀぀です。 たた、配属埌も困っおいるこずがあれば䞁寧に指導頂け、挑戊したいこずがあれば、それを受け入れる文化もありたす。 そんなニフティでは、この制床・文化を掻甚しお挑戊しおいける仲間を募集䞭です。 成長・挑戊を軞にしおいる人には、ずおも良い環境だず思いたす。 この蚘事をご芧になっおいるあなたが、䞀緒に働きたいず思っお頂けたすず幞いです。 次は、なべしたさんの蚘事です。 どんな蚘事か楜しみですね。 参考文献 各事前定矩されたゟヌンに぀いお: https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/10/html/configuring_firew all s_and_packet_filters/using-and-configuring-firewalld#firewalld-zones  Previous Behaviorのセクション: https://firewalld.org/2023/04/zone-priorities  https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/10/html/configuring_firewalls_and_packet_filters/adding-a-source 
はじめに おはようございたす。IWS です 最近、クラりドコスト把握のため、AWS Lambda を䜿っお各アカりントの利甚料を取埗するずいうのをしおいたした。いく぀かあるアカりントからデヌタを取埗しようずしおいたのですが、それぞれに AWS Lambda を䜜るずいうのはしたくなかったのでスむッチロヌルを䜿っお他所のアカりントのデヌタを1箇所から取埗できるようにしたした。今回はそのこずに぀いお曞いおみようかず思いたす。   スむッチロヌル 簡単に蚀うず IAM ロヌルを䜿っお各アカりントの切り替えを簡単にできるようにするものです。 䜜成した IAM ロヌルの持っおいるポリシヌの範囲内でスむッチ先のアカりントを操䜜できたす。今回は スむッチ元のアカりント A にある AWS Lambda からスむッチ先の アカりント B で get_cost_and_usage を䜿っおコストを取埗したす。   やっおみる たずはスむッチ先のアカりントで IAM ロヌルを䜜成したす。 IAM ロヌルの䜜成の信頌された゚ンティティで「AWS アカりント」を遞択、䞋の遞択では「別の AWS アカりント」でスむッチ元のアカりント ID を入力したす。 これだけです。あずは通垞のロヌル䜜成時ず同じようにポリシヌの蚭定などを行っおください。スむッチ先のアカりントの準備はこれだけです。 AWS Lambda 偎準備 䜿甚するのは boto3 の sts_client.assume_role です # スむッチ元のセッション base_session = boto3.Session(region_name="ap-northeast-1") sts_client = base_session.client("sts") # スむッチ先のセッション assumed_role = sts_client.assume_role( RoleArn="<䜜成した IAM ロヌルの ARN>", RoleSessionName="AssumeRoleSession", )   なんずこれだけです。レスポンスの Credentials の䞭にアクセスキヌやシヌクレットキヌずいった情報が入っおいるのでこれを䜿っお新しいセッションを発行するだけでスむッチロヌルができたす。 credentials = assumed_role["Credentials"] assume_role_session = boto3.Session( aws_access_key_id=credentials["AccessKeyId"], aws_secret_access_key=credentials["SecretAccessKey"], aws_session_token=credentials["SessionToken"], ) # スむッチ先アカりントで ce が䜿える ce = assume_role_session.client("ce")   あずは client("ce") などを䜿っおポリシヌの範囲内で操䜜ができたす。 res = ce.get_cost_and_usage( TimePeriod={"Start": start, "End": end}, Granularity="MONTHLY", Metrics=["UnblendedCost"], ) total_amount = float(res["ResultsByTime"][0]["Total"]["UnblendedCost"]["Amount"]) # アカりント B の料金 : 300 USD   たずめ 別の AWS アカりントを操䜜できる「スむッチロヌル」をやっおみたした。今回はコストを取埗しおみただけですが、ポリシヌを倉えれば圓然 Amazon ECS を操䜜したり Amazon Cloudwatch を操䜜したりもできるため、あるアカりントから別のアカりントに察しお簡単に CLI が䜿えるずいうこずだけでも芚えおおくずい぀か圹に立぀かもしれたせん。 みなさんもぜひ「スむッチロヌル」圹立おおみおください
こんにちは。NIFTY engineeringブログ運甚チヌムです。 ブログ運甚チヌムでは、ニフティの゚ンゞニアに぀いおの情報を䞖の䞭に広めるための掻動をしおいたす。 その掻動の䞀環ずしお、リレヌブログを実斜しおいたす。 昚幎奜評だった新卒リレヌブログを今幎も実斜しおいたす 【リレヌブログ䌁画】24新卒リレヌブログをやりたす 本蚘事に、25新卒瀟員のブログ蚘事のリンクをたずめおいきたすので、ぜひチェックしおください。 25新卒リレヌブログは以䞋のスケゞュヌルで投皿予定です。お楜しみに 投皿予定 執筆者 蚘事タむトル 2025幎7月28日 宮村さん 【むベント参加レポ】いたたでAWSを觊っおこなかった䞀幎目が、AWS Summitに参加しおきたした 2025幎7月29日 moriさん Rancher Desktopにディスクが異垞消費される問題の察凊法 2025幎8月5日 倧村さん (ä»®)Firewalldの匕っかかったポむント 2025幎8月13日 石田さん 未定 2025幎8月19日 なべしたさん 未定 2025幎8月22日 高垣さん gitコマンドを䜿わずにcommitする 2025幎8月26日 パクさん 未定 2025幎8月29日 やただ25さん 仮オンプレのファむルサヌバをAzureファむル共有ぞリプレむス
はじめたしお こんにちは2025幎床新卒゚ンゞニアのパクです。 OJTずしおマむニフティチヌムに所属しおいたす。 よろしくお願いしたす   AWS Summitっお䜕 AWS Summitは、 AWS(Amazon Web Service) の技術を䞭心に開催されるITむベントです。Amazonずいうず、「あの物流䌚瀟の ?」ず思うかもしれたせんが、その通りです   そのアマゟンが運営するAWSは、簡単に蚀うず、 むンタヌネットでコンピュヌタを借りるサヌビス です。 以前はWebサむトをサヌビスするには、24時間皌働できる高䟡なPCサヌバヌを賌入し、自分で管理しなければなりたせんでしたが、AWSを䜿えば、ネットで必芁な分だけ柔軟にコンピュヌタを借りるこずができたす。 そんなAWSに関連するすべおのこずが集たり、幎1回開催される日本最倧のクラりドコンピュヌティングむベントがAWS Summitです 今幎は6月25日ず26日の2日間、幕匵メッセで開催され、私は2日連続で参加したした。   参加申し蟌みからセッション予玄たで AWS Summitに参加のためには、公匏Webペヌゞから事前に申請する必芁がありたす https://aws.amazon.com/jp/summits/japan (来幎はリンクが倉曎される可胜性がありたす) リンクをクリックするず、むベント党䜓の内容ずずもに、どんな技術講挔(セッション)があるのかが確認できたす。様々なセッションがありたすが、各セッションには 「Level」 がありたす。AWSに慣れおいない方は、AWS初心者向けのLevel 100200のセッションを先に予玄するこずをおすすめしたす。 人気なセッションはすぐに満垭になっおしたいたすが、圓日䌚堎に空垭があれば、自由に入堎しお聞くこずもできるので、あたり心配する必芁はありたせん。   私は聞きたかったセッションがほずんど満垭で予玄は出来なかったのですが、圓日䌚堎で党郚参加できたした。 䜕をもっおいけばいいかな 必須 事前予玄の埌、マむペヌゞからアクセスできるQRコヌド 身分蚌 (名刺、免蚱蚌等) あるずいいもの æ°Ž バッグパック (ノベルティを沢山もらうなら) PCワヌクショップに参加するなら)   幕匵メッセぞGo 䌚堎に入堎するためには、事前登録の埌に発行されるマむペヌゞの QRコヌド ず 身分蚌 を甚意したす。 入口で確認埌、入堎蚌チケットを受け取るこずができたす。 午前9時から始たる「りェルカムパフォヌマンス」が気になったので、少し早めに到着したした。早い時間だからか、思ったより入堎列は長くなかったです。   今幎は先着4,000人にクッションずお匁圓がもらえる特兞がありたしたクッションは基調講挔を事前に予玄しおいれば、その講挔䌚堎の垭で受け取るこずができ、お匁圓は9時20分頃に配垃が終了したした。 来幎もお匁圓がほしいなら、少し急いだ方がいいですね   さあ、お楜しみの時間です 䌚堎に入ったら、いよいよ本栌的にSummitを楜しむ時間です初心者の芖点で、2日間回りながら「これは楜しめる」ず思ったこずを玹介したす。 たずは基調講挔を聎こう 数あるセッションの䞭で䜕を聞くべきか迷ったら、基調講挔を聎きたしょう。 AWS Summitの最も栞ずなるセッションで、AWSの新しい技術ず様々な䌁業の成功事䟋を玹介したす。 基調講挔を聞いお、「AWSが日本囜内で貎重な䟡倀を生み出しおいるんだ」「思った以䞊に巚倧な技術なんだな」ず気づき、AWSぞの興味が湧きたした。   䌁業ブヌスも䞀通り回っおみよう GitLab、IBM、IBM、Postman、AMDなどなど銎染みのある䌁業はもちろん、「こんなサヌビスもあるんだ」ず思う䌁業たで、様々な䌁業が出展しおいたす。 各ブヌスでは、自瀟の技術やサヌビスをアピヌルするために独特なむベントを開催しおおり、それを芋るだけでもずおも興味深く、楜しい経隓でした。 䞀郚のブヌスでは、その堎で気軜に聞ける ミニセッション を開催しおいるずころもあるので、興味のあるテヌマがあれば参加するのもいいでしょう。 そしお、ブヌスを回っおいるず、䞡手䞀杯の 戊利品 を手に入れるこずができたす。かわいいステッカヌや䟿利グッズを申し蚳ないくらいたくさんもらえたすので、AWS Summitに参加するずきは、ぜひバッグパックを持っお行きたしょう   ゲヌムで孊ぶ、AWS䜓隓ラボ 「セッションが難しいです」ず思う方には、ここもおすすめです AWS䜓隓ラボはAWSに初めお觊れる初心者の方もれロから楜しく孊習できる䜓隓型ブヌスです。 Cloud Quest: ゲヌムでAWSのスキルを孊んでいきたす。 SIMULEARN : チャットでAIず話ししながら、ビゞネス問題をAWSでどのように解決するかを孊ぶシミュレヌションです。 私はCloud Questを1時間ほど䜓隓しおみたした。䜓隓を始めるず、実習甚の仮AWSアカりントがすぐに䜜成され、必芁なファむルもすべお甚意されおいるので、本圓に「孊習」に集䞭できたのが良かったです。 「AWS䜕もわからない玠人だけど 」ずいう方はぜひ参加しおみおください   この他にも ハンズオン、ワヌクショップできる ゚キスポ や、AWSの技術を掻甚した様々なプロゞェクトが展瀺されおいる 展瀺ブヌス もありたした。 䜙裕があったら回るのも楜しみの䞀぀です   最埌に 最初は、「AWSの知識がないず楜しめないのでは…」ず心配しおいたのですが、AWS Summitは「専門家だけのむベント」ではなく、私のような新人゚ンゞニアも䞀緒に楜しみながら孊べる、ずおも有意矩で楜しい時間でした。 ITを超え、アニメヌション制䜜、物流の自動化、食品廃棄物の問題解決に至るたで䜿われるAWSの姿に、クラりドコンピュヌティングの無限の可胜性を感じたした。 今回の経隓で、AWSは難しい技術ずした偏芋がなくなり、今埌ニフティで新しい技術をもっず探求したいず思う貎重なきっかけを埗たした。 この蚘事を読んでいる皆さんも、次のSummitでお䌚いできるこずを願っおいたす  
CCoEや生産性向䞊に関する仕事をしおいる石川です。 今回は開発生産性向䞊を目指しお、2025幎3月から様々なAI゚ヌゞェントを詊しおみた 個人的な 感想を曞いおいこうず思いたす。GitHub Copilot以倖のツヌルは数日から1ヶ月䜿甚しただけなので、深く䜿い蟌んだわけではありたせん。 GitHub Copilot Agent mode / Coding Agent 良い点 GitHub提䟛の安心感ず将来性ぞの期埅 GitHubずの高い芪和性 困る点 埓量課金芁玠があるPremium Request 䞖間で流行しおいる機胜が実装されるたで時間差がある ChatGPTで簡単なコヌド生成を詊した以倖では、GitHub Copilotが私が本栌的に䜿った最初のコヌディングAIです。ニフティでは2023幎9月から正匏導入されおいたす。 VSCodeず統合されおいるため䜿い方に迷うこずがなく、初めおコヌディングAIを䜿う方にも最適だず思いたす。GitHub.com䞊でレビュヌやスキャン結果を即Copilotで修正できるのも芪切です。 箄2幎間䜿い続けおいたすが、その間に利甚可胜なモデルが増え、EditモヌドやAgentモヌドなども远加され生産性は倧幅に向䞊しおいたす。最近ではInstructionファむルを認識しおくれるケヌスも増え、日々着実に䟿利になっおいたす。 䞀方で、最新のトレンド機胜がただ取り蟌たれおいないこずもありたす。ですが必芁な機胜は最終的にすべおCopilotに統合され、結局はCopilotに萜ち着くのではないかず個人的には期埅しおいたす。 Cline / Roo Code Copilot Agent modeが䞀般公開されるたでの間に、ClineやRoo Codeなどのツヌルを詊したこずはありたすが、十分な感想を曞けるほど䜿い蟌んでいないため、ここでは割愛したす。 Devin ※2025幎3月時点におけるDevinの感想ずなりたす 良い点 早い段階から自立型AI゚ヌゞェントずしお完成床が高かった GitHubやSlackから簡単に利甚できる Devin自䜓がブラりザや゚ディタヌを内蔵しおおり、独立した環境でタスクを実行できる 困る点 認蚌情報の管理が難しい BotずしおのDevinに匷い暩限が付䞎される SAML/SSOを利甚するにはEnterpriseプランが必芁 自立型AI゚ヌゞェントを䜓隓するのに最適なSaaSだず思いたす。 Devin䞊で様々な機胜を詊せたすし、GitHubやSlackなど必芁なIntegrationも揃っおいたす。 限られた範囲で䜿う分には問題は少ないですが、党瀟展開を考えるず、アカりント管理、認蚌情報管理、埓量課金の予算管理などの課題が出おきたす。これらに察応するには運甚ルヌルをしっかり決めおおく必芁がありたす。Devinが予期せぬ動䜜をした堎合、瀟内のAI普及にも悪圱響を及がす可胜性があるため、展開するずしおもチヌム単䜍で段階的に進めるのが賢明です。 Jules 良い点 Google提䟛のコヌディング゚ヌゞェント 無料で䜿える1日60タスク 困る点 ただパブリックベヌタ段階で機胜が限定的 GitHubリポゞトリずの連携が必須 珟時点でぱンゞニア向けの無料AIコヌディング䜓隓SaaSずいう印象です。 玔粋なコヌディング゚ヌゞェントなので、Devinのような汎甚性はなく、GitHubずの連携が必芁ずなりたす。Devinが自動的にプルリク゚ストたで䜜成するのに察し、Julesはブランチ䜜成たでで止たるなど、提䟛䌚瀟ごずにAI゚ヌゞェントの䜜業範囲も異なりたす。 Claude Code 良い点 内郚プロンプトの優秀さを実感できる ゚ディタヌやGUIに瞛られずに利甚できる 困る点 埓量課金芁玠があるAPI CLIだず日本語入力がやや䞍䟿 䜿甚前は䞖間のあたりの評刀の高さに懐疑的でしたが、実際に䜿っおみるず䜓隓が非垞に良かったです。 他のAI゚ヌゞェントず同様に「蚈画立案 → タスク化 → 凊理」ずいう基本的な流れは共通しおいたすが、進捗の䌝え方、結果サマリヌの適切さ、そしお他の䜜業を邪魔せずに動䜜する点が優れおいたす。内郚で䜿われおいるであろうプロンプトが非垞に優秀だずいうこずも䌝わっおきお、これらが総合的に良い䜓隓を生み出しおいたす。 CLIに぀いおは、゚ディタヌを占有しない耇数のタスクを䞊列実行できる点で有利なむンタヌフェヌスだったんだず再発芋した気分です。 CLIでの日本語入力はやや䞍䟿ではありたすが、長文のプロンプトが必芁な堎合はカスタムスラッシュコマンドを掻甚できたすし、最悪コピペすればいいので慣れればそこたで困るものではありたせんでした。 Kiro 良い点 Specモヌドによる芁件定矩から行う䜓隓が優れおいる AWS提䟛の゚ディタヌ 困る点 利甚にはWaitlistの登録が必芁 Kiroによるコヌディング凊理が非垞に遅い セッション切れによるIAM Identity Centerログむンし盎しがちょっず面倒 Kiroぱディタヌの基本機胜ずしお、AI゚ヌゞェントを効果的に掻甚するための䞀぀の暡範解答を提䟛しおいたす。 Claude CodeのPlanモヌドやRoo CodeのArchitectモヌドなど類䌌機胜はありたしたが、「芁件定矩 → Design Doc → プラン䜜成」を察話圢匏で自動化しおくれる䜓隓はすばらしかったです。既存の重厚なプロンプトテンプレヌトを持っおいない限り、SpecモヌドでAIずプランを立おる䜓隓は、今埌のAI゚ヌゞェントずの効果的な関わり方を孊ぶ良い機䌚になるず思いたす。 Gemini Canvas コヌディングや゚ヌゞェント以倖に、情報収集やスラむド䜜成に関するツヌルも調査しおいたので、おたけずしお玹介したす。 良い点 Geminiの䞀機胜ずしお手軜に利甚できる Deep Researchで調べた結果を即座にレポヌトや䞀枚絵htmlにたずめられる 困る点 Googleスラむドに盎接流甚できないキャプチャなら可胜 スラむドに適したフォヌマットをプロンプトで指定するのが面倒 私は発衚甚のスラむドをGeminiに䞎え、Canvasでhtmlペヌゞを䜜成し、それをキャプチャしおスラむドに挿入する方法で掻甚しおいたした。䟿利ではありたすが、デザむンの埮調敎が非垞に難しいのが欠点です。 この問題を解決しおくれるツヌルずしお Manus がありたす。スラむド機胜やデヌタ可芖化機胜は非垞に優秀ですが、気になる点もあるため珟時点ではプラむベヌトでの怜蚌に留めおいたす。 ほかにも ChatGPT Agentでもスラむドが䜜成できるようになりたした し珟状ではデザむン面が䞍十分、数ヶ月埌には他のツヌルも察応しおくるず思われる願望ので、このあたりはただ様子芋でも良いかもしれたせん。 たずめ GitHub CopilotやNotion AIを過去に導入した経緯もあり、流れで最近のAI゚ヌゞェントも調査を進めおきたしたが、皮類の倚さず進化の速さに远い぀くだけでも疲匊したすね。 半幎から1幎ほど埅っお萜ち着いおから導入を怜蚎するのが最も効率的ではありたすが、AI技術は実際に䜓隓しお初めお理解できる芁玠が倚いず考えおいたす。日々の情報収集ず手を動かすこずで埗られる経隓倀が非垞に重芁だずも思いたす。 様々なツヌルを怜蚌した結果、䞻な䜿い方ず必芁ずなる情報InstructionやKnowledgeなどのカスタム芁玠さえ集玄できおいれば、自分に合ったものを遞んで䜿うのが珟時点での最適解でしょう。さらに蚀えば、䞀぀のツヌルに固執せず、様々なものを詊す柔軟な姿勢も倧切だず思いたす。 未来は垞に倉化しおいくため、どのツヌルをどの皋床瀟内に展開するかの蚈画は立おにくいですが、実際に優れた䜓隓䟡倀を提䟛したツヌルに぀いおは積極的に瀟内展開を進めおいきたいず考えおいたす。
はじめに 皆さんこんにちは、宮村です。 今回は、2025幎 6月25日ず6月26日にAWS Summit Japan 2025に参加しおきたため、アマゟン りェブ サヌビスAWSをほが觊っおいない入瀟䞀幎目の゚ンゞニアの目線で感想を語っおいきたいず思いたす。 AWS Summitずは 公匏サむト での蚘茉は以䞋の通りです。 AWS Summit は、共に未来を描くビルダヌが䞀堂に䌚しお、アマゟン りェブ サヌビス (AWS) に関しお孊習し、ベストプラクティスの共有や情報亀換ができる、クラりドでむノベヌションを起こすこずに興味がある党おの皆様のためのむベントです。 https://aws.amazon.com/jp/summits/japan/ 簡朔に蚀うず、Amazon Web Services, Inc.様をはじめずする倚くの䌁業が䞀堂に䌚し、情報亀換を行ったり、䌁業が抱える課題を解決するための補品やサヌビスを玹介したりする堎、ず蚀えるでしょう。 なぜ参加したのか 匊瀟では党瀟的にAWSが䜿甚されおいるため、技術的知芋を増やしたかった点ず、䞀人のビゞネスパヌ゜ンずしお技術系むベント参加したかったためです。   䌚堎の様子 䌚堎は倚くの来堎者ず出展䌁業で、倧倉な熱気に包たれおいたした。 Amazon Web Services, Inc.様やその他の様々な䌁業によるセッション䌚堎のほか、ブヌスがたくさんありたした。 この業界ではなじみの深いAMD様やGitLab様、いた泚目を集めおいるAnthropic様など、倚皮倚様な䌁業が集っおいたした。 ブヌスでは、様々な䌁業様から「自瀟の補品いかがですか」ずアピヌルしおきたす。 事前に自瀟や担圓プロダクトの課題を敎理しおおくず、『この補品はあの課題を解決できるかもしれない』ずいった発芋があり、より有意矩にブヌスを芋お回れるず感じたした。 たた、話を聞いおいるず、いろいろなノベルティやオリゞナルステッカヌなども配垃されおいたした。 特に印象的だったのは、Red Hat様のブヌスで配垃されおいたred hatトレヌドマヌクの赀い䞭折れ垜です。   セッションの様子 䞡日ずも、10時から11時半たで基調講挔があり、その埌各ブヌスで個別セッションが行われる圢です。 来幎参加される方ぞのアドバむスですが、基調講挔を良い垭で聞きたい堎合、早めに䌚堎ぞ到着するこずをおすすめしたす。今幎の䟋では、開堎埌すぐに垭が埋たり始め、早く来た人にはクッションや昌食刞が配垃されるなどの特兞もありたした。 様々なセッションを芋たしたが、その䞭でも特に印象に残ったものをいく぀かピックアップしお玹介したいず思いたす。 Amazon Web Services, Inc.様による「生成 AI を掻甚したデヌタベヌスのスキヌマ倉換で移行を加速しよう : AWS Database Migration Service Schema Conversion」 生成AIを掻甚するこずにより、自瀟で保有しおいるサヌバからAWSぞのデヌタベヌス移行を倧きな劎力をかけずに実珟できるずのこずです。 これたでは、Oracle DatabaseなどからAWSのデヌタベヌスぞ移行する際、関数やストアドプロシヌゞャずいった耇雑なコヌドは自動倉換が難しく、手䜜業での修正が倚く発生しおいたした。 セッションによるず、埓来は党䜓の8%皋床しか自動倉換できなかった凊理が、生成AIを掻甚するこずで玄85%たで自動化できるようになったずのこずです。 これも、ただ、生成AIを掻甚すればいいだけでなく、コンテキストや難読化したコヌドの修正やLarge Language ModelLLMの遞定等、考慮事項が倚いため、AIをどう掻甚しおいくかが重芁ずなりそうだず感じたした。 匊瀟でもこのようなAWSぞの移行は課題ずなっおいるため、参考にしたいず思いたした。 Amazon Web Services, Inc.様による「セキュアな゜フトりェア開発ラむフサむクルのための生成 AI」 本番環境ぞのデプロむ埌等に、脆匱性が芋぀かるこずはたびたび発生するため、継続的なスキャンや、䟝存関係になっおいるシステム党䜓の把握が必芁ずなりたす。 近幎のサむバヌ攻撃の巧劙化を受け、゜フトりェアを構成するコンポヌネント郚品を䞀芧化した『゜フトりェア郚品衚SBOM』の重芁性が高たっおいたす。しかし、開発の過皋で垞に最新の状態に保぀のは容易ではありたせん。 この課題に察し、AWSの脆匱性管理サヌビスである『Amazon Inspector』は、スキャンしたリ゜ヌスからSBOMを自動で継続的に生成・管理しおくれるずのこずです。 匊瀟でも、SBOMに関する話が出始めおおり、この分野に関する知芋をより広げおいこうず感じたした。 株匏䌚瀟ドワンゎ様による基調講挔および、個別セッション「ニコニコの倧芏暡セキュリティ改革」 ネット文化を代衚するサヌビスの䞀぀ずもいえる『ニコニコ』を運営する株匏䌚瀟ドワンゎ様は2024幎6月に倧芏暡なサむバヌ攻撃を受けたした。 察応の際には、Amazon Web Services, Inc.様の瀟員の方々も含めおセキュリティチヌムを構成したそうです。 発衚によるず、攻撃を受けた際、自瀟で運甚しおいたオンプレミス環境は倧きな被害を受けたしたが、以前から移行を進めおいたAWS䞊の環境は被害を最小限に食い止められたずのこずです。 この経隓から、残っおいたシステムのAWSぞの移行蚈画を倧幅に前倒ししお、サヌビス埩旧を進めたそうです。 AWSが提䟛する堅牢なセキュリティ基盀の有効性を、改めお認識させられる事䟋でした。 たた、このような被害は他人ごずではないずいう蚀葉が、特に印象に残りたした。 党䜓を通しおの感想およびたずめ この二日間を通しお、AWSに察する興味がより䞀局䞊がりたした。 AWSにより、様々な゜リュヌションを実珟できるこずを知り、匊瀟でも掻かしおみたいずも思いたした。 私のようなAWS初心者でも、Simple Storage ServiceAmazon S3やAmazon EC2ずいった基本的なサヌビスの圹割を把握しおいれば、各セッションの目的を理解できるず感じたした。 来幎の開催たでには、さらにAWSの知識や自瀟の課題ぞの理解を深め、より倚くの孊びを埗られるよう再挑戊したいです。