スプーキーズのちょっとTech。

SPOOKIES社内のより技工的な、専門的なブログページです。

CTF勉強会 - corCTF2023の振り返り

こんにちは!

スプーキーズにはCTF部があり、週末にはコンテストに参加したり、振り返り会を実施しています。 今回の振り返りは、7/29 - 31に参加した corCTF2023 について行いました。

振り返りの内容

今回は短時間の振り返りということもあり、web問題を3つやりました。

  • web/force
  • web/msfrognymize
  • web/frogshare

部長の矢野さんがメインで解説してくれます。 特にweb/frogshareでは、終了1分前に解けたというドキドキ感も共有してもらいました。 個人的に感じたレベル感としては、全然解けないということはなく、ひらめき次第で解けそうで、聞いていて楽しかったです。 (解説を聞いたら僕でもできそうだと思うんですが、実際にやってる最中は全く閃かないんですよね・・。そこが面白いとこでもある。)

ホームページを作りたい

CTF部は2018年から活動しているのですが、振り返りなど、社内の知見も溜まってきました。 そういったコンテンツや活動報告などを含めて、情報を公開できるような場を作りたいということで、ホームページの作成を進めています。 SECCON 2023 が9月に開催されますが、それまでには公開したいと考えています。

社外振り返り会もしたい

振り返り会は社内だけでなく、外部の方とも一緒に楽しく行いたいと思っています。 具体的な形はまだ決まっていませんが、興味を持たれた方はぜひご参加ください! リモートでお酒でも飲みながら、一緒に課題を解いて楽しんじゃいましょう!

簡単ですが、CTF部の活動報告でした。

ロゴ作りたいなー

最近の社内勉強会

こんにちは。毎日本当に暑いですね。
地球温暖化が終わり、地球沸騰化時代になってしまったとのこと。

さて、最近のスプーキーズは社内勉強会が熱く、週1,2で開催されています。
弊社の社内勉強会は、

  • 自由テーマ
  • テーマとしたい書籍などは経費購入
  • 発表ごとに手当がもらえる

制度となっております。

直近で開催された勉強会テーマはこんな感じです。

テーマ 概要
EJSのOut-of-Scope Vulnerabilities 脆弱性とは言わせない??社内CTFチームへのお誘いも
初学者向けシステム開発体験アプリ システム開発を体験するアプリ作ったので見てみて
Array.prototype メソッド全部眺めてみよう
正規表現とその仕組み 有限状態オートマトン、NFAからDFAへの変換など
Ionic FrameWorkとはなんぞ Ionicを自作アプリでよく使うので紹介
気軽に社外勉強会参加のススメ 社外勉強会も刺激になるし、参加してみるとおもしろい
VSCode における Vue の開発環境のTIPS 拡張機能やはまりポイントの紹介など

自由テーマではあるのですが、
実際のプロジェクトで遭遇した課題や解決方法などを共有できたらいいねと話してます。

また社外勉強会も開催したいと思っているので、興味ありましたら参加頂ければ嬉しいです。

簡単ですが、社内勉強会の紹介でしたー。

社内勉強会の様子

ChatGPT により勉強会を生成する勉強会をした話

どうもお久しぶりですこんにちは、AIの流れになんとか乗りたい寺師です。

最近みんなサボりがちになっている勉強会ですが、
開催への道筋として、その資料の叩き台をAIに作ってもらおう!という勉強会を開きました。

(勉強会自体は3月のですが...)
(そもそもブログ化もAIにやってもらうべきでは...??)

目次

  1. 雑な勉強会資料を共有
  2. その勉強会資料を作る際のAIへの指示(プロンプト)を解説
  3. AIによる文章生成の注意点や感想
  4. 弊社内質疑応答タイムで出てきた話

雑な勉強会

(無価値なので読まなくて良いです) speakerdeck.com

AIへの指示解説

今回はChatGPT4を利用します。 回答は冗長なので、隠します。

また、一緒に使っているプロンプトの技術(体系的に発展しつつある)を記載します。 ただし、プロンプトの技術は進歩が早すぎるので、3週間前のこの内容はだいぶ古いです(保身)

最初の投稿

使っているプロンプト技術

  • ロールプロンプティング
    • AIの役割を決めてあげることにより、その役割に応じた出力を期待するプロンプト
    • 参考: learnprompting.org
  • Zero-Shotプロンプティング
  • 自動文章修正プロンプト
    • 出力結果をAIに評価させ、再起的に修正を続けるプロンプト
    • 参考: note.com

プロンプト

あなたはAI(主に ChatGPT)を利用することで生計を立てており、ChatGPT の第一人者です。
私はあなたに対して、以下の文章をお願いします。

AIに関する勉強会(10分程度)をお願いしたいと考えており、まずは勉強会の草案を文章に起こしていただけると幸いです。
最終的にマークダウンを作成していただきますが、一旦は素の文章で大丈夫です。

以下に箇条書きで教えて欲しい内容を挙げます。

- AI を使ってエンジニアはどのように飛躍するか
- AI を使うと開発における要件定義の工程がどのように短縮されるか
- AI を使うと開発における仕様設計の工程がどのように短縮されるか
- AI を使うと開発における開発の工程がどのように短縮されるか
- AI を使うと開発におけるテストの工程がどのように短縮されるか
- 詰まるところAI を使わないとどのように遅れるか

その文章をわかりやすく勉強で洗練された内容にするために、修正点を可能な限り沢山指摘してからそれを修正する、を3回繰り返してください。
また、その際文章に対して 指摘点を元に100点満点で評価して、 100点を目指してください。

回答

まず、以下のような文章を提案します。

AIを利用することで、エンジニアは開発プロセス全体が劇的に変わります。AIを使うことで、要件定義の工程が短縮され、仕様設計や開発の工程も効率化され、テストの工程においても時間を削減できます。AIを活用しない場合、プロジェクト全体の遅延が発生する可能性があります。

1回目の修正点と評価:

文章の構成が明確でない (70点) 修正: 各段落で1つのトピックに焦点を当てる 修正後の文章:

AIを利用することで、エンジニアは開発プロセス全体が劇的に変わります。まず、要件定義の工程が短縮されます。AIを使うことで、過去のデータや類似プロジェクトから要件を自動的に抽出できるため、時間と労力を節約できます。次に、仕様設計の工程も効率化されます。AIは既存の設計パターンを学習し、最適な設計を提案することができます。さらに、開発の工程も効率化されます。AIはコード生成やバグ修正の自動化により、開発者の作業量を減らすことができます。最後に、テストの工程においても時間を削減できます。AIはテストケース生成や自動テスト実行を行い、品質保証の効率を向上させます。AIを活用しない場合、プロジェクト全体の遅延が発生する可能性があります。

2回目の修正点と評価:

具体的な例や数値が不足している (80点) 修正: 具体的な例や効果の数値を追加する 修正後の文章:

AIを利用することで、エンジニアは開発プロセス全体が劇的に変わります。まず、要件定義の工程が短縮されます。AIを使うことで、過去のデータや類似プロジェクトから要件を自動的に抽出できるため、時間と労力を節約できます。実際に、要件定義の工程を最大50%短縮することができる場合もあります。次に、仕様設計の工程も効率化されます。AIは既存の設計パターンを学習し、最適な設計を提案することができます。これにより、設計工程を最大30%短縮できることが報告されています。さらに、開発の工程も効率化されます。AIはコード生成やバグ修正の自動化により、開発者の作業量を減らすことができます。このおかげで、開発工程の時間を最大40%削減できることがあるとされています。最後に、テストの工程においても時間を削減できます。AIはテストケース生成や自動テスト実行を行い、品質保証の効率を向上させます。実際、テスト工程の時間を最大60%削減できるケースもあります。AIを活用しない場合、プロジェクト全体の遅延が発生する可能性があります。例えば、同じプロジェクトでAIを使用しない場合、開発期間が2倍以上になることもあります。

3回目の修正点と評価:

読み手への訴求力が弱い (90点) 修正: メリットやデメリットを強調し、読者が関心を持つような表現を追加する 修正後の文章:

AIを利用することで、エンジニアは開発プロセス全体が劇的に変わります。効率化されたプロセスは競争力の向上につながり、開発チームの信頼性も高まります。まず、要件定義の工程が短縮されます。AIを使うことで、過去のデータや類似プロジェクトから要件を自動的に抽出できるため、時間と労力を節約できます。実際に、要件定義の工程を最大50%短縮することができる場合もあります。これにより、クライアントとのコミュニケーションが円滑になり、スムーズなプロジェクト進行が期待できます。次に、仕様設計の工程も効率化されます。AIは既存の設計パターンを学習し、最適な設計を提案することができます。これにより、設計工程を最大30%短縮できることが報告されています。さらに、開発の工程も効率化されます。AIはコード生成やバグ修正の自動化により、開発者の作業量を減らすことができます。このおかげで、開発工程の時間を最大40%削減できることがあるとされています。品質の高いソフトウェアを迅速に提供することで、顧客満足度が向上します。最後に、テストの工程においても時間を削減できます。AIはテストケース生成や自動 テスト実行を行い、品質保証の効率を向上させます。実際、テスト工程の時間を最大60%削減できるケースもあります。これにより、バグの発見と修正が迅速に行われ、より安定した製品が提供できます。AIを活用しない場合、プロジェクト全体の遅延が発生する可能性があります。例えば、同じプロジェクトでAIを使用しない場合、開発期間が2倍以上になることもあります。これは、競争力の低下や顧客の信頼を失うリスクが高まることを意味します。

以上の修正を行った結果、文章の評価は100点に近づいたと考えられます。文章の構成が明確で、具体的な例や効果の数値が示され、読者に対してメリットやデメリットが強調されています。これにより、読者はAIを活用することでどのような効果が期待できるのか、また、AIを活用しない場合にどのようなリスクがあるのかを理解できるでしょう。文章をわかりやすく、勉強会で洗練された内容にすることができました。この文章をもとに、マークダウン形式で資料を作成し、参加者が効果的にAIの活用方法を学べるような勉強会を開催できることでしょう。

草案のスライド化

使っているプロンプト技術

  • Zero-Shot
  • 自動文章修正

プロンプト

ありがとうございます!!

上記で作成していただいた草案を元に、5分間の勉強会で使う資料をマークダウン形式で作成してください。
スライドの資料はマークダウンの記法 `# h1` `## h2` を使うことでスライドが1枚作成されます。

その資料をわかりやすく洗練された内容にするために、修正点を可能な限り沢山指摘してからそれを修正する、を3回繰り返してください。
また、その際文章に対して 指摘点を元に100点満点で評価して、 100点を目指してください。

回答

まず、以下のようなマークダウン形式のスライド資料を提案します。

# AIによる開発プロセスの効率化

## 要件定義の短縮
- AIが過去のデータや類似プロジェクトから要件を自動抽出
- 最大50%の短縮が可能

## 仕様設計の効率化
- AIが既存の設計パターンを学習し最適な設計を提案
- 設計工程を最大30%短縮

## 開発工程の効率化
- AIによるコード生成やバグ修正の自動化
- 開発工程の時間を最大40%削減

## テスト工程の効率化
- AIによるテストケース生成や自動テスト実行
- テスト工程の時間を最大60%削減

## AIを活用しない場合のリスク
- 開発期間が2倍以上になることもあり、競争力が低下顧客の信頼を失うリスクが高まる

1回目の修正点と評価:

  • スライドの構成がシンプルすぎる (70点) 修正: スライドにビジュアル要素や強調すべきポイントを追加する
修正後のマークダウン:
# AIによる開発プロセスの効率化
## 要件定義の短縮
- AIが過去のデータや類似プロジェクトから要件を自動抽出
- 最大50%の短縮が可能

## 仕様設計の効率化
- AIが既存の設計パターンを学習し最適な設計を提案
- 設計工程を最大30%短縮

## 開発工程の効率化
- AIによるコード生成やバグ修正の自動化
- 開発工程の時間を最大40%削減

## テスト工程の効率化
- AIによるテストケース生成や自動テスト実行
- テスト工程の時間を最大60%削減

## AIを活用しない場合のリスク
- 開発期間が2倍以上になることもあり、競争力が低下
- 顧客の信頼を失うリスクが高まる

2回目の修正点と評価:

  • より具体的な例が不足している (80点) 修正: 各項目に具体的な例や詳細を追加する

修正後のマークダウン:

# AIによる開発プロセスの効率化
## 要件定義の短縮
- AIが過去のデータや類似プロジェクトから要件を自動抽出
- クライアントとのコミュニケーションが円滑に
- 最大50%の短縮が可能

## 仕様設計の効率化
- AIが既存の設計パターンを学習し最適な設計を提案
- 設計ミスの削減や高品質な設計の実現
- 設計工程を最大30%短縮

## 開発工程の効率化
- AIによるコード生成やバグ修正の自動化
- 開発者の作業量を減らし、品質の高いソフトウェアを迅速に提供
- 開発工程の時間を最大40%削減

## テスト工程の効率化
- AIによるテストケース生成や自動テスト実行
- より安定した製品が提供できる
- テスト工程の時間を最大60%削減
- AIを活用しない場合のリスク
- 開発期間が2倍以上になることもあり、競争力が低下
- 顧客の信頼を失うリスクが高まる

3回目の修正点と評価:

  • 視覚的な要素がまだ足りない (90点) 修正: スライドに図表やグラフを追加することで、視覚的に理解しやすくする

修正後のマークダウンは、実際のスライド作成ツールで図表やグラフを挿入することを想定しています。修正を行った結果、スライド資料はわかりやすく洗練された内容になり、100点に近づいたと考えられます。具体的な例や詳細が追加され、視覚的な要素も充実しました。これにより、参加者はAIの活用方法や効果、そしてAIを活用しない場合のリスクを理解しやすくなります。このマークダウンをもとに、5分間の勉強会で効果的にAIの開発プロセスの効率化について伝えることができるでしょう。

質疑応答の先読み

使っているプロンプト技術

  • ロールプレイ

プロンプト

ありがとうございます!

AIに詳しくないもののエンジニアとしては熟達している30人のエンジニアの前で上記のスライドを勉強会を行ったとして、質疑応答で出てきうる指摘を可能な限り出し、その回答の記載をお願いします。

以下の指摘は1例です。

- 具体的な数字を挙げていただいている部分がありますが、なぜその数字になるのかは参考文献を見ることでわかりますでしょうか?そこの説明ももらえると助かります。 例えば仕様設計の工程が工程が最大30%削減可能なのか説明していただきたいです。

回答

質疑応答で出てくる可能性のある指摘と回答をいくつか示します。

指摘1: 具体的な数字を挙げていただいている部分がありますが、なぜその数字になるのかは参考文献を見ることでわかりますでしょうか?そこの説明ももらえると助かります。例えば仕様設計の工程が工程が最大30%削減可能なのか説明していただきたいです。

回答1: 申し訳ありませんが、このプレゼンテーションでは具体的な参考文献は提示していません。ただし、提供している数字は複数の事例や研究に基づいています。具体的な数値については、プロジェクトの規模や複雑さ、使用するAI技術によって異なります。興味があれば、参考文献を後ほど提供いたしますので、ぜ ひご確認いただければと思います。

指摘2: AIを使って開発プロセスが効率化されると述べられていますが、どのようなAI技術が具体的に活用されているのでしょうか?

回答2: 開発プロセスにおいて活用されるAI技術はいくつかあります。例えば、自然言語処理(NLP)を使って要件定義の自動抽出が行われたり、機械学習を用いて設計パターンの最適化が行われます。また、コード生成やバグ修正には、プログラム合成や強化学習が利用されることがあります。テスト工程では、テストケース生成や自動テスト実行のためにAIが活用されます。

指摘3: AIによる開発効率化のメリットが明確ですが、デメリットや懸念点はありますか?

回答3: AIによる開発効率化には確かに多くのメリットがありますが、デメリットや懸念点も存在します。例えば、AIの導入コストが 高い場合があり、特に小規模なプロジェクトでは費用対効果が悪いことがあります。また、AIによる自動化が進むことで、一部の開発者のスキルが陳腐化する恐れがあります。さらに、AIが提案した解決策や生成したコードに対して、人間が適切に評価・監視する必要があるため、完全に手間がなくなるわけではありません。最後に、プライバシーやセキュリティの懸念もあります。AIを利用することで、機密性の高い情報が第三者に漏れるリスクがあるため、適切な対策が必要です。

指摘4: AI技術の進化に伴って、将来的に開発者の仕事がなくなる可能性はありますか?

回答4: AI技術が進化することで、一部の開発者の仕事は自動化される可能性がありますが、開発 者の仕事が完全になくなるということは考えにくいです。AI技術はあくまで開発者を支援するツールであり、より効率的に仕事を進めることができるようになります。また、AI技術自体の開発や、新しい技術の研究が求められるため、開発者の役割は変化し続けます。実際には、AIの導入により開発者はより高度な課題に取り組むことができるようになり、クリエイティブなアイデアや戦略的な意思決定など、人間が持つ独自のスキルを発揮できるようになるでしょう。

指摘5: AIを利用する際、プロジェクトの規模や複雑さによって効果が異なると考えられますか?

回答5: はい、その通りです。プロジェクトの規模や複雑さによって、AI技術の効果は異なります。小規模なプロジェクトでは、AIの導入コストが高くなる可能性がありますが、大規 模なプロジェクトでは、より大きな効果を発揮することが期待されます。また、複雑なプロジェクトでは、AIによる自動化や最適化がさらに価値をもたらすことがあります。ただし、プロジェクトの内容や目的によっては、AI技術が適切な解決策を提供できない場合もあります。そのため、AI技術を活用する際には、プロジェクトの要件や目標を考慮して適切な技術を選択し、その効果を評価することが重要です。

参加者同士の懇親会

プロンプト

ありがとうございます。

エンジニア30人でざっくばらんに感想を言い合い、エンジニアとしてAIが何に使えるかのアイディアを共有し合うことになりました。
出てきた発言の中で、あなたが良かったと思ったアイディアを5つほど出力をお願いします。

回答

AIを用いたコードレビュー自動化: AIを活用してコードレビューを効率化し、バグやコーディング規約の違反を自動的に検出する。これにより、エンジニアがより高度な問題解決に専念できるようになる。

AIを利用したリソース管理の最適化: AIを活用して、開発チームのリソース管理(タスクの割り振りや人員配置など)を最適化し、プロジェクトの進行状況を効率的に把握できるようにする。

AIを用いたテストデータ生成: AIを活用して、ソフトウェアのテストに使用するテストデータを自動生成する。これにより、テスト環境の構築やテストケースの作成が効率化される。

AIによる推奨開発手法の提示: AIを用いて、開発手法やツールの選択に関する推奨事項を提供する。これにより、チ ームが最適な開発環境を構築しやすくなり、生産性が向上する。

AIを活用した顧客ニーズの分析: 顧客や市場からのフィードバックをAIを使って分析し、製品開発や機能改善に役立てる。これにより、顧客満足度の向上や製品の市場適合性を高めることができる。 これらのアイディアは、AI技術をエンジニアリング分野に応用することで、開発プロセスの効率化や品質向上につながる可能性があります。今後のプロジェクトでこれらのアイディアを参考に、積極的にAIを活用することで、エンジニアリングチームの成果をより一層高めることができるでしょう。

全員でブラッシュアップ会議

使っているプロンプト技術

  • Zero-Shot
  • 自動文章修正
    • 出力結果をAIに評価させ、再起的に修正を続けるプロンプト

プロンプト

ありがとうございます。

質疑応答と30人分の評価と不満点とその理由を参考に、勉強会の資料を再度ブラッシュアップし、10分のボリュームとなるよう勉強会の資料を再度出力してください。
また、口頭で補足したい内容があれば資料内にコメントをお願いします。

資料をわかりやすく洗練された内容にするために、30人のエンジニアに協力してもらい指摘点を可能な限り箇条書きにし、それぞれ指摘点による減点を評価して100点を目指してください。
それを修正する、を繰り返して98点以上となるまで、ブラッシュアップを繰り返してください。

そうして完成した資料....

が、冒頭の勉強会

AIによる文章生成の注意点や感想

  • 人間と違ってワーキングメモリを持たず、全て深く考えずに超鋭い直感で返事する人間だと感じる。
    • 入力された文章と出力した文章だけが脳内にある人間
    • 直感のため、自明なもの以外の論拠はなんもない。
  • 思考順序含めて何から何まで全て出力していくようなプロンプトで最初にお願いするのが大事
  • 勉強会生成は、AIの知識を補強する必要があるので、生半可な知識では難しい
    • 今回の雑勉強会なんてまさにそうで、専門家から専門家への勉強家のような内容はまだ難しい
      • それっぽいもの(いわゆる中央値)を出力するだけなので、内容が尖れば尖るほど期待できなくなる

弊社内質疑応答タイムで出てきた話

Q.ロールプレイって意味あるの?

  1. AIは全てがベクトル(言語空間)で計算されており、そのベクトルに従ってそれっぽい文章(中央値)を出力する仕組みなので、ベクトルを任意の方向へをしてあげることで期待した方向に誘導できる

こんなこともできる。

生粋のギャル爆誕。ギャルと言えども反省文はちゃんと書く

独白の文章までギャルっぽくなる。なぜならギャルだから。

言語空間内のギャル文字量が足りず、ギャル文字を理解しきれていない様子。

Q.世の中に出てるLINEの献立を考えるサービスはどうやってできているの?

  1. あれはAIに指示(プロンプト)を与えた状態でユーザの入力を受け付け、その出力を返すような仕組みです。

そのため、指示を忘れさせるプロンプトハッキングが流行ってましたね!(もはや昔の話になりつつある)

終わり

ありがとうございました!!

M1 Macでnodenvを使ってNode.js 10に切り替える

Node.jsのリリーススケジュール(GitHub - nodejs/Release: Node.js Release Working Groupより引用)

zeosuttです。

4月ですね。
ということは、間もなくNode.js 12がサポート終了となります。早めに後継LTSバージョンへ移行しましょう。

さて、その一つ前のLTSバージョンといえばNode.js 10ですが、
ふとM1 Macで nodenv を使ってNode.js 10に切り替えたくなったので、試してみました。

続きを読む