LoginSignup
3
3

More than 1 year has passed since last update.

便利だなと思う技術・ツールについて雑に紹介する

Last updated at Posted at 2022-12-03

はじめに

なんだかんだプログラミングを始めて3年が経とうとしています。Qiitaは結構書く方ですがアドベントカレンダー参加は初です🎉

今回は2022年にやっぱり便利だよなと再実感した技術・ツールを皆さんに雑に紹介していきたいと思います。普段は大学生をしつつ、内定者アルバイトとしてSRE(Site Reliability Engineering)として仕事しているので少しインフラ寄りの技術・ツールの紹介になっています。ご了承ください。

さあ、雑に紹介していきますよ。

GitHub Actions

みんな大好きGitHubの一部の機能であるGitHub Actions。簡単に言うとワークフローを自動化するやつです。対抗馬として上がるのはCircleCIですが今後の開発においてはGitHub Actions一択でしょう。

実際のコードを見ていきましょう。

name: Deploy to Amazon ECS

on:
  pull_request:
    branches:
      - main
    types:
      [closed]

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    - name: Checkout
      uses: actions/checkout@v3

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ap-northeast-1

    - name: Login to Amazon ECR
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1

    - name: Build, tag, and push image to Amazon ECR
      id: build-image
      env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        IMAGE_TAG: ${{ github.sha }}
      run: |
        docker build -t $ECR_REGISTRY/repository:$IMAGE_TAG .
        docker push $ECR_REGISTRY/repository:$IMAGE_TAG
    
    - name: Fill in the new image ID in the Amazon ECS task definition
      id: task-def
      uses: aws-actions/amazon-ecs-render-task-definition@v1
      with:
        task-definition: .github/workflows/task-definition.json
        container-name: container
        image: ${{ steps.login-ecr.outputs.registry }}/container:${{ github.sha }}

    - name: Deploy Amazon ECS task definition
      uses: aws-actions/amazon-ecs-deploy-task-definition@v1
      with:
        task-definition: ${{ steps.task-def.outputs.task-definition }}
        service: service
        cluster: cluster
        wait-for-service-stability: true

上記のコードはmainブランチに出していたPRがMerge(close)されたら

mainブランチにチェックアウト -> AWS認証 -> ECRにログイン -> DockerイメージをBuild & ECRにPush -> タスク定義のimage書き換え -> タスク定義を更新

といったようにGitHubの操作をトリガーにしてCI/CDを構築できます。

先ほど紹介したCI/CDとしての役割だけでなく以下のように効率化や草の実績づくりとしても使えます。

  • PRが生成されたら自動でレビューワーにアサインする
  • 定期実行(cron)を使ってGitHubの草を生やす

Terraform

続いてはインフラをコード化(Infrastructure as Code)できるTerraformです。CloudFormationやAWS CDKなどと比較されることが多いですが個人的にはTerraformが一番好きです。

  • 宣言的に記述できる
  • インフラのCI/CDが実現できる
  • 関連のOSSが充実している
  • 様々なクラウドサービスに対応している(AWS, GCP, Datadog etc)

以上の4点がメリットです。特に関連のOSSが充実していることはとてもメリットだと感じています。中でも好きなOSSはtfsecとtfcmtです。

tfsec

tfsecはTerraformのセキュリティ静的解析ツールです。例えば、22番ポートを解放するといった記述をすると

resource "aws_security_group_rule" "accept22" {
    security_group_id = aws_security_group.security_group.id
    type              = "ingress"
    cidr_blocks       = ["0.0.0.0/0"]
    from_port         = 22
    to_port           = 22
    protocol          = "tcp"
}

しっかり、叱ってくれます。どうしても無視したい場合はtfsec:ignore:IDを対象resourceの上の行に記述すると無視できますよ。

image.png

もっと詳しく知りたい方はドキュメントがとても充実しているので参考にすると良いです。

tfcmt

tfcmtはterraform plan, applyの結果を GitHubのPRにいい感じにコメントしてくれるツールです。詳しいことは作者のZennを見ると良いですよ。

AWS Amplify

Amplifyは静的なWebサイトやSSRで動くNext.jsなどのホスティングに特化しているサービスです。

以前、SwaggerのUIをWebサイトとして皆んなで共有したいと思ったことがありました。しかし、認証を付けたり、CI/CDを構築する手間、金銭コストなどを考慮に入れると中々良いものは見つかりませんでした。

そこで、ピッタリ当てはまったのがAmplifyでした。以下の4点を実現し、非常に助かりました!

  • 数クリックでGitHubと連携し、CI/CDも自動で組んでくれる
  • Basic認証がかけれる(内部でCloudFrontとLambdaが使われているっぽい?)
  • 既にSSL化されている
  • ほぼ0円で運用できる

LucidChart

最後は一番好きでよく使っているLucidChartです。作図・資料作成などができるサービスで、エンジニアの場合だとER図やアーキテクチャ図などを書く際にめちゃくちゃ使えます。なんといっても使い心地が良すぎる。ぜひ、試してみてください!

無料枠は3つまでしか図を作成できないので要注意です。いつか課金したい...

なんとなく、LucidChartで書いたアーキテクチャ図でも載せておきます。

encer (1).png

さいごに

本当に雑になってしまいましたが好評ならアドベントカレンダー中に第2弾出そうかなと思います!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3