🗒️

AIで加速するエンジニアの情報発信:効率的な記事作成と思考整理の新スタイル

に公開

はじめに

「自分の得た知見を他のエンジニアにも共有したい」「便利なツールや解決策を広めたい」
エンジニアであれば、このように考えた経験は少なくないのではないでしょうか。私自身も、技術記事やアイデアの発信は、コミュニティへの貢献はもちろん、自身の知識整理やキャリア形成にも繋がる価値ある活動だと考えています。

しかし、「記事を書く時間がない」「文章を書くのが苦手」といった理由で、情報発信をためらったり、継続が難しくなったりするケースもよく耳にします。共有したいアイデアはあっても、それを分かりやすく形にするにはハードルを感じる、という声も私自身の実感としてあります。

近年、そのハードルを下げる手段として AI の活用が注目されています。AI をうまく活用すれば、記事作成における思考整理と効率化を両立し、より気軽に、かつ質の高い情報発信が可能になるのではないかと期待しています。

この記事では、そうした考えに基づき、エンジニアの情報発信における AI 活用の可能性を探ります。私自身の経験も踏まえながら、思考整理と効率化を両立するための具体的なアプローチについて考察し、提案することを目的としています。

なぜエンジニアは発信するのか? 改めて考えるその価値

技術記事などを通じて情報発信を行うことには、自分自身と他者、そしてコミュニティ全体に対して多くの価値あるメリットがあります。

自分へのメリット

情報発信は、まず自分自身の成長に大きく貢献します。

  • 能力向上

    • 知識の深化: 他者に説明できるレベルまで理解を深めようとすることで、知識がより強固に定着します。「教えることは最大の学び」とも言われる通りです。
    • 言語化能力の向上: 複雑な技術やアイデアを分かりやすく伝える過程で、文章力や説明力が自然と向上します。
    • 調査力の向上: 正確な情報を発信するためにはリサーチが不可欠です。その過程で、信頼できる情報源を見極め、効率的に情報を収集する調査能力が身につきます。
    • 思考の整理: 頭の中にあるアイデアや知識を構造化し、文章に落とし込むことで、自身の思考がクリアになります。
  • 評価向上

    • 技術力の証明: 発信した記事は、自身のスキルや経験、問題解決能力を具体的に示すポートフォリオとなります。
    • 認知度の向上: 継続的な情報発信により、特定の分野における専門家として認識され、信頼性や市場価値が高まる可能性があります。
    • 機会の創出: 記事がきっかけとなり、転職、新たなプロジェクトへの参加、カンファレンスでの登壇依頼など、予期せぬキャリアチャンスに繋がることがあります。
    • 自信の獲得: 記事を完成させる達成感や、読者からのポジティブな反応は、自己肯定感を高める大きな要因となります。

他者へのメリット

自身の成長だけでなく、情報発信は他のエンジニアやコミュニティ全体にも良い影響を与えます。

  • 問題解決の支援

    • 課題解決の手助け: あなたが共有した経験や解決策が、同じ問題で悩む他のエンジニアの助けとなり、彼らの時間や労力を節約することに繋がります。
    • ノウハウの共有: 便利なツール、効率的なワークフロー、特定の技術に関する実践的なノウハウなどを広めることで、多くの人の開発効率向上に貢献できます。
  • コミュニティへの貢献

    • コミュニティの活性化: 情報が共有され、それに対する議論やフィードバックが生まれることで、エンジニアコミュニティ全体の活性化に繋がります。
    • 技術の多様性と発展: 様々なバックグラウンドを持つエンジニアが知見を提供し合うことで、技術的な多様性が促進され、業界全体の発展に貢献します。
    • 後進の育成: あなたの記事が、技術を学び始めたばかりの初学者や経験の浅いエンジニアにとって貴重な学習リソースとなり、彼らの成長をサポートします。

もちろん、記事作成には時間と労力がかかりますし、継続の難しさや、時には批判への恐れを感じることもあります。それでも、これらの多岐にわたる価値を考えると、情報発信はエンジニアにとって非常に魅力的で意義深い活動と言えるでしょう。

記事作成の壁と AI 活用の可能性

情報発信の価値は理解していても、実際に記事を作成しようとすると、「時間」と「文章力」という壁に直面することがあります。「伝えたいこと(解決したい課題とその方法)はあるのに、それを分かりやすい文章にまとめるのが大変…」と感じる方は多いのではないでしょうか。

ここで、AI の活用が有効な選択肢となります。AI、特に大規模言語モデルは、文章の生成、構成、校正などを得意としており、記事作成プロセスにおける強力なアシスタントとなり得るからです。

AI は万能? それとも…? 忘れてはならないエンジニア自身の思考

「それなら、AI に解決したい課題とその方法を伝えれば、質の高い記事が自動的に完成するのでは?」と考えるかもしれません。
確かに、AI はそれらしい文章を生成してくれます。しかし、記事作成を完全に AI 任せにすることには、いくつかの重要な注意点があります。

  • 技術的な正確性とニュアンス: AI は学習データに基づいて文章を生成しますが、特定の技術選択における微妙な判断理由、暗黙の前提条件、トレードオフといったコンテキストまでは理解していません。最終的な技術的正しさの担保は、執筆者であるエンジニア自身が行う必要があります。
  • 独自性と体験の欠如: AI が生成した文章は、一般的で没個性的になりがちです。読者が本当に価値を感じるのは、単なる情報だけでなく、書き手自身の具体的な経験談、試行錯誤のプロセス、独自の視点や考察です。これらは AI だけでは生み出せません。
  • 思考整理・深化の機会損失: 「文章を書く」という行為自体が、自分の考えを整理し、深める絶好の機会です。AI に丸投げしてしまうと、この貴重な学びの機会が失われてしまう可能性があります。

AI との賢い付き合い方:AI への指示を「思考整理」に活かす

「思考整理のプロセスが面倒だから AI を使いたいのに、思考整理の機会損失を気にしていては本末転倒では?」と感じるかもしれません。これはもっともな意見です。

そこで提案したいのが、「AI に指示を出すプロセス」そのものを、思考整理の機会として積極的に活用するというアプローチです。

特に重要なのは、記事の構成要素として 「どのような課題や要望があって(Why)、そのために何をしたのか(How)、結果どうなったのか(What)」 という流れを意識することです。単なる How-to 記事に留まらず、この「Why(課題・背景)」を明確にした上で AI に伝えることで、より文脈に即した、示唆に富む記事の骨子を AI に作成させることができます。

AI に的確な指示を出すためには、「この記事で何を伝えたいのか」「核心となるポイントは何か」を明確にする必要があります。この作業自体が、まさに自身の思考を整理・構造化するプロセスとなるのです。

【実践編】Cursor エディタを使った具体的な記事作成フロー

ここでは、AI 支援型コードエディタである Cursor を活用した、具体的な記事作成フローを紹介します。例として、筆者が以前 Zenn で公開した記事『Amplify 環境で AWS アカウント毎に Lambda レイヤーを切り替える方法』を作成した際のプロセスを基に説明します。

1. 初期プロンプトによるドラフト作成

まず、記事の核となる情報を Cursor に伝え、最初のドラフトを作成させました。以下に、その際に使用したプロンプトの例を示します。

あなたはシステムエンジニアのWEBライターです。
以下の前提と内容を基に記事を dbf72c594473e3.md  に執筆してください。

## 前提
- 他のエンジニアに知見を共有するための技術記事です。
- Amplify を利用したWEBアプリケーションの技術記事です。
- 読みやすい文章にしてください。
- 適切な表現に校正してください。

## 内容
開発環境と本番環境でAWSアカウントを分けて運用している場合に、以下の問題が発生します。

- 画像変換を行うLambda関数で、Sharpを利用するためのLambdaレイヤーを設定しています。
- このLambdaレイヤーはAmplifyで管理しておらず、ZIPファイルをアップロードして設定しています。
- そのため、AWSアカウント毎にLambdaレイヤーのバージョンが異なる事象が発生してしまいます。
- 通常AmplifyでLambda関数にLambdaレイヤーを設定しようとすると、Lambdaレイヤー名とバージョンの組み合わせで設定することになります。
- そのAWSアカウントで指定したLambdaレイヤーのバージョンが存在しない場合にエラーになります。
- デプロイ環境でこの問題を解決するために、AWSアカウントIDを見てLambdaレイヤーを切り替える必要がありました。
- この問題解決策として、CDKによるカスタムリソースとAWS SDKを利用することでこちらが実現可能であることを確認しております。

Amplify をインストールして作成される `amplify/backend.ts` で以下のようなにAWSアカウントIDを取得できます。

```backend.ts
import AWS from 'aws-sdk';
const sts = new AWS.STS();
const accountId = (await sts.getCallerIdentity({}).promise()).Account;
```

Lambdaレイヤーを適用したいLambda関数 `amplify/functions/query/test/resource.ts` があるとします。
このLambda関数にLambdaレイヤーを設定するには以下のようにします。

```typescript
import { test } from './functions/query/test/resource';
const backend = defineBackend({
  test,
});
backend.test.resources.cfnResources.cfnFunction.layers = [
  'arn:aws:lambda:ap-northeast-1:ACCOUNT_ID_FOR_DEVELOPMENT:layer:sharp:14',
];
```

この2つを組み合わせることで、AWSアカウントID毎に異なるLambdaレイヤーを設定することができるようになります。
以下完成品

```typescript
import { test } from './functions/query/test/resource';
import AWS from 'aws-sdk';
const backend = defineBackend({
  test,
});
const sts = new AWS.STS();
const accountId = (await sts.getCallerIdentity({}).promise()).Account;
if (accountId === 'ACCOUNT_ID_FOR_DEVELOPMENT') {
  backend.test.resources.cfnResources.cfnFunction.layers = [
    'arn:aws:lambda:ap-northeast-1:ACCOUNT_ID_FOR_DEVELOPMENT:layer:sharp:14',
  ];
}
```

このプロンプトでは、「前提」として記事の目的やターゲット読者を明確にし、「内容」として課題の背景、技術的な詳細、そして解決策のコード例を具体的に記述しています。このように構造化して情報を与えることで、AI は文脈をより正確に理解し、意図に近いドラフトを生成しやすくなります。

2. 追記・修正プロンプトによる内容の拡充

初版の記事を公開した後、さらに改善されたアプローチが見つかったため、内容を追記しました。その際のプロンプト例です。

あなたはシステムエンジニアのWEBライターです。
この記事でAmplify環境でAWSアカウント毎にLambdaレイヤーを切り替える方法を紹介をしましたが、新しい方法が見つかったので記事に追記してください。

## 前提
- 他のエンジニアに知見を共有するための技術記事です。
- Amplify を利用したWEBアプリケーションの技術記事です。
- 読みやすい文章にしてください。
- 適切な表現に校正してください。

## 内容
backend.ts で設定しなくても defineFunction でコールバックを使用することでアカウントID毎にLambdaレイヤーを設定可能になります。

```typescript
import { defineFunction } from '@aws-amplify/backend'
import { aws_lambda, Aws, Fn, CfnCondition, CfnMapping } from 'aws-cdk-lib'

export const testCallback = defineFunction((scope) => {
  const fn = new aws_lambda.Function(scope, 'testCallback', {
    runtime: aws_lambda.Runtime.NODEJS_20_X,
    handler: 'index.handler',
    code: aws_lambda.Code.fromAsset('amplify/functions/test-callback'),
  })

  const isKnownAccountCondition = new CfnCondition(scope, 'IsKnownAccountCondition', {
    expression: Fn.conditionOr(
      Fn.conditionEquals(Aws.ACCOUNT_ID, 'ACCOUNT_ID_FOR_DEVELOPMENT'),
      Fn.conditionEquals(Aws.ACCOUNT_ID, 'ACCOUNT_ID_FOR_PRODUCTION')
    )
  })

  const accountLayerMapping = new CfnMapping(scope, 'AccountLayerMapping', {
    mapping: {
      'ACCOUNT_ID_FOR_DEVELOPMENT': { layers: ['arn:aws:lambda:ap-northeast-1:ACCOUNT_ID_FOR_DEVELOPMENT:layer:sharp:14'] },
      'ACCOUNT_ID_FOR_PRODUCTION': { layers: ['arn:aws:lambda:ap-northeast-1:ACCOUNT_ID_FOR_PRODUCTION:layer:sharp:2'] },
    }
  })

  const cfnFunction = fn.node.defaultChild as aws_lambda.CfnFunction
  cfnFunction.addPropertyOverride('Layers', Fn.conditionIf(
    isKnownAccountCondition.logicalId,
    accountLayerMapping.findInMap(Aws.ACCOUNT_ID, 'layers'),
    Aws.NO_VALUE
  ))

  return fn
})

```

ここでも、追記したい内容(新しい解決策とそのコード)を具体的に指示することで、AI による効率的な加筆を促しています。

3. レビュー・加筆修正

Cursor (AI) が生成したドラフトは、あくまで「下書き」です。そのまま公開するのではなく、以下の観点でレビューと加筆修正を行うことが重要です。

  • 技術的な正確性の確認: コード例や技術的な解説に誤りがないか、細部まで注意深くチェックします。
  • ニュアンスの調整: AI が生成した表現が硬すぎたり、意図と微妙に異なっていたりする場合、より自然で分かりやすい言葉遣いに修正します。
  • 独自性の追加: 自身の経験に基づく補足情報、試行錯誤の過程で得た学び、考慮した代替案との比較など、AI だけでは書けない「人間ならではの視点」を加筆します。これにより、記事の価値が格段に向上します。
  • 構成の調整: 全体の流れがスムーズか、見出しの区切りは適切かなどを確認し、必要に応じて構成を微調整します。

この「人間によるレビュー・加筆修正」のプロセスを経ることで、AI の効率性とエンジニア自身の知見・経験を融合させた、質の高い記事を効率的に作成することが可能となります。

まとめ:AI を相棒に、エンジニアの発信をもっと身近に

AI は、エンジニアの情報発信をサポートしてくれる強力な「相棒」となり得ます。特に Cursor のような AI 支援ツールを記事作成プロセスに組み込むことで、思考整理と執筆の効率化を高いレベルで両立できる可能性があります。

具体的なプロンプトで指示を出し、AI が生成したドラフトを基にレビューと加筆修正を行う。このフローは、技術的な正確性を担保しつつ、自身の経験や考察といった独自性を加えた価値ある記事を、従来よりも少ない労力で作成するための有効なアプローチの一つと言えるでしょう。

ただし、繰り返しになりますが、AI はあくまでアシスタントです。最終的な記事の品質を保証し、読者の心に響くような独自性や深い洞察を盛り込むのは、私たちエンジニア自身の重要な役割です。

AI を賢く活用することで、情報発信のハードルが下がり、知識の共有、自己成長、コミュニティへの貢献といった素晴らしい価値を、より多くのエンジニアが享受できるようになることを願っています。さあ、AI という頼れる相棒と一緒に、あなたの持つ素晴らしい知見を発信してみませんか?

リバナレテックブログ

Discussion