2024年3月7日: AI活用とセキュアプログラミングについて

【デジタルアライアンス ハ タ ケ ヤ マ】

イケジマさん、組み立て家具って面倒ですよね・・・わかります。
私も苦手で、先日娘の勉強机用の椅子の組み立て家具を買ったのですが、
簡単な組み立てにもかかわらずかなり苦戦して何とか組み立てました。

難しい案件だなんてとんでもないです。技術の事は色々至らないところがあり、
イケジマさんにも助けて頂きました。今後ともよろしくお願い致します。

今日は、AI活用とセキュアプログラミングについて紹介したいと思います。
実は記事をAI(Copilot)に依頼して書いてもらいました。

<Copilotに投稿したプロンプト>

ブログ記事を書いてほしい。テーマはAI活用とセキュアプログラミングについて。

AI活用は、Microsoft Office365 Copilotと、Github Copilot(Github Copilot Chatの事も含めて)について。
Github Copilotでリファクタリングが出来たり、Github Copilot Chatがコードレビューやコードリーディングでも大活躍することを紹介願います。一説によれば実装の時間の7~8割以上がコードを読む時間にかかるという情報があります。こうした事を加味すると、AIにコードリーディングさせてコードを素早く理解することが出来たら、実装工数の短縮につながると思います。そういう情報も捕捉願います。
また、Github Copilotはエンタープライズ契約の場合はソースコードやチャットのと投稿内容が学習に利用されることはなく、情報漏洩のリスクも無い旨紹介願います。
また、近々リリースが予定されているGithub Copilot Workspaceについても触れて下さい。
Github Copilot Workspaceにおいては、将来的にこのライブラリのバージョンアップ対応をして。
と依頼すれば、そのタスクをAIがすべてこなして本番リリースできる日が来る可能性も・・・?
夢を見すぎかもしれませんが、あながち大げさでないという旨も盛り込んでください。
あと、LangChainを使えば、生成AIを活用した独自システムも構築可能な旨紹介したいです。
ファインチューニングすれば、社内ナレッジや、ECサイトで商品の問合せを自然言語で受け付けて、
AIがコンシェルジュや営業をする事も可能です。そうした事も説明願います。
ファインチューニングの説明を掘り下げてほしい。ECサイトで販売している商品についての知識や、社内ナレッジの場合は社内のルールや情報について学習させることが出来て、それについて自然言語で問合せ可能になる旨説明して下さい。
PDFや画像等、様々なファイル形式に対応している旨も紹介願います。
なので、社内規定や、法務的な事も、ファインチューニングしてデータベースにベクトルデータを格納する事で、
自然言語で問合せ可能となります。こうした事は情報量が多く人間が特定の事柄についてどういう規定となっているか。
どういう法律になっているかを調べようとすると時間がかかります。AIによってそうした事務コストを削減できるのは、
非常に画期的な活用方法だと考えます。という事も盛り込んでください。ファインチューニングの対応ファイル形式についても、
詳細を紹介願います。全ファイル形式ではなく、代表的なファイル形式のみの紹介でお願いします。

セキュアプログラミングについては、先日とある勉強会でセキュアプログラミングの講習を受けたことについて紹介したいです。
その講習では、OWASP TOP 10をベースにして、リスクの高い脅威に対する対策を紹介されておりました。
その講習は、とある企業の方が提供されたのですが、有料でも研修が提供されており、その場合は資料も全て提供頂けるそうです。講義の録画もできるとの事で、繰り返し社内で啓蒙できるようです。自社内でセキュアプログラミングの知識を底上げ出来て、かつ継続的に研修を実施できる資料や録画データも手に入る事から、利用の価値は大きい印象でした。
システムの実装において、セキュリティ要件は非機能要件でありながら、脆弱性があって実害が出たら賠償責任が発生します。そのリスクの大きさについても説明して下さい。なので、プロとしてはセキュリティ要件を満たした実装をするのが当たり前となります。そのあたりの事も説明に盛り込んでいただけたらと思います。また、SBOMを自動生成したり、現在使っているライブラリの脆弱性を自動でレポートしてくれるツールがあるそうです。そうしたセキュアプログラミングの知恵やツールについてもご紹介願います。

<Copilotが生成したブログ記事>

◆AI活用の可能性と現状

AIは、人間の知能を模倣する技術として、様々な分野で活用されています。特に、自然言語処理や画像認識などの分野では、AIが人間の能力を超えることもあります。AIは、私たちの仕事や生活を効率化し、創造性や価値を高めることができます。

AIツールは無数に有るので、とても全部は紹介しきれません。本日はその中から、Microsoft Office365 CopilotとGithub Copilot、Github Copilot Chatという3つのAIツールを紹介します。これらのツールは、AIが生成した文章やコードを提案してくれることで、私たちの文書作成やプログラミングをサポートしてくれます。

Microsoft Office365 Copilotは、WordやPowerPointなどのOfficeアプリケーションで使えるAIツールです。文章を入力すると、AIが関連する内容や表現を提案してくれます。例えば、レポートやプレゼン資料を作成するときに、Copilotが適切なデータや図表を挿入したり、文章を改善したりしてくれます。また、Copilotは、自分の言いたいことを簡単に入力するだけで、AIがそれをもとに文章を生成してくれる機能も持っています。これにより、時間や労力を節約することができます。

GitHub Copilotは、コードの自動補完や生成、レビューなどをAIが支援するツールです。GitHub Copilot Chatは、コードに関する質問や解説をチャット形式で行える機能です。これらのツールは、開発者の生産性やコードの品質を向上させることができます。

GitHub Copilotでリファクタリングもできます。GitHub Copilotは、コードの意図やコンテキストを理解して、より良い書き方を提案してくれます。例えば、以下のようにコメントでリファクタリングを依頼すると、GitHub Copilotがコードを改善してくれます。

“`python
# q: リファクタリングしてPython3で推奨されている書き方にして
def is_palindrome(s):
s = s.lower()
s = s.replace(” “, “”)
return s == s[::-1]
“`

“`python
# a: リファクタリングしてPython3で推奨されている書き方にすると以下のようになります
def is_palindrome(s):
s = “”.join(c.lower() for c in s if c.isalnum()) # アルファベットと数字だけを残す
return s == s[::-1] # 逆順にして比較する
“`

GitHub Copilot Chatがコードレビューやコードリーディングでも大活躍します。GitHub Copilot Chatは、コードの概要や動作、問題点や改善点などをチャットで教えてくれます。例えば、以下のようにコードを指定して質問すると、GitHub Copilot Chatが回答してくれます。

“`python
# q: このコードは何をしているの?
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
“`

“`python
# a: このコードは、フィボナッチ数列のn番目の項を再帰的に計算して返す関数です。フィボナッチ数列とは、最初の2項が1で、以降の項が直前の2項の和になる数列です。例えば、fib(0)は0、fib(1)は1、fib(2)は1、fib(3)は2、fib(4)は3、fib(5)は5となります。
“`

実装の時間の7~8割以上がコードを読む時間にかかるという情報があります。開発者はコードを書く時間よりもコードを読む時間の方が多く、コードの理解にはコードの量や複雑さに応じて時間がかかるということです。そのため、AIにコードリーディングさせてコードを素早く理解することができたら、実装工数の短縮につながると考えられます。実際に、GitHub CopilotやGitHub Copilot Chatを使った場合、開発者の85%はコードの品質に自信を持てたと回答し、コーディングが簡単でエラーが少なく、読みやすくて再利用可能、簡潔で保守性が高くレジリエントなコードを作成できるということです。

GitHub Copilotはエンタープライズ契約の場合はソースコードやチャットの投稿内容が学習に利用されることはありません。GitHub Copilot Enterpriseは、組織のプライベートリポジトリやプロンプトや提案を使用して、GitHub製品を支える機械学習モデルを学習させることはないとしています。また、GitHub Copilot Enterpriseでは、組織のポリシーや基準に合わせてGitHub Copilotをカスタマイズすることができます。したがって、GitHub Copilotはエンタープライズ契約の場合は情報漏洩のリスクがないと言えます。

AIは日々進化しておりまして、近々リリースが予定されているGithub Copilot Workspaceについてもご紹介します。
これは、Github Copilotの機能をさらに拡張したAIツールです。Copilot Workspaceは、AIが自動的にプロジェクトの管理や開発を行ってくれることで、私たちの開発を劇的に変えることができます。

例えば、Copilot Workspaceに「このライブラリのバージョンアップ対応をして」と依頼すると、AIが以下のようなことをしてくれます。

  • ・ライブラリの最新版をダウンロードしてインストールする
  • ・ライブラリの変更点や新機能を確認する
  • ・プロジェクトのコードをライブラリの最新版に合わせて修正する
  • ・テストやデバッグを行ってコードの動作を確認する
  • ・コミットやプッシュを行ってリポジトリに反映する
  • ・プルリクエストやマージを行って本番環境にリリースする

これらのタスクをAIがすべてこなしてくれるとしたら、私たちはどれだけ楽になるでしょうか。もちろん、これはまだ夢のような話ですが、あながち大げさでないということもあります。AIの技術は日々進化しており、私たちの想像を超えることができるかもしれません。

LangChainは、生成AIを活用した独自システムを構築できるプラットフォームです。LangChainは、AIのモデルやデータを自由に組み合わせて、自分の目的に合ったAIシステムを作ることができます。LangChainは、ファインチューニングという機能を使って、AIのモデルを自分のデータに合わせて学習させることができます。ファインチューニングによって、AIの性能や精度を向上させることができます。

例えば、ECサイトで商品の問合せを自然言語で受け付けて、AIがコンシェルジュや営業をするシステムを作りたいとしましょう。LangChainでは、以下のような手順でそのシステムを構築できます。

  • ・LangChainのマーケットプレイスから、自然言語処理のモデルを選ぶ。例えば、GPT-4やBERTなどのモデルがあります。
  • ・自分のデータを用意する。例えば、社内ナレッジの場合は社内のルールや情報に関する文書や質問回答のペア、ECサイトの場合は商品の説明やレビュー、購入者の質問回答のペアなどがあります。
  • ・LangChainのファインチューニング機能を使って、モデルを自分のデータに合わせて学習させる。このとき、LangChainは自動的にデータの前処理やハイパーパラメータの調整を行ってくれます。
  • ・LangChainのデプロイ機能を使って、学習したモデルを自分のシステムに組み込む。このとき、LangChainは自動的にAPIやUIの生成や管理を行ってくれます。

これで、ECサイトで商品の問合せを自然言語で受け付けて、AIがコンシェルジュや営業をするシステムが完成します。このシステムでは、AIが自分のデータに基づいて、ユーザーの質問に適切に回答したり、商品の紹介や勧め方をしたりすることができます。

LangChainの対応するファイル形式については、テキストファイル、画像ファイル、音声ファイル、動画ファイルなどがあります。詳細は、LangChainの公式サイト をご覧ください。これにより、自分のデータの形式に関係なく、AIのモデルに学習させることができます。例えば、社内規定や法務的な事も、ファインチューニングしてデータベースにベクトルデータを格納することで、自然言語で問合せ可能となります。こうした事は情報量が多く人間が特定の事柄についてどういう規定となっているか、どういう法律になっているかを調べようとすると時間がかかります。AIによってそうした事務コストを削減できるのは、非常に画期的な活用方法だと考えます。

◆セキュアプログラミングの重要性と学び

セキュアプログラミングとは、セキュリティ要件を満たすようにプログラムを設計・実装・テスト・運用することです。セキュアプログラミングは、プロとしてのプログラマーの責任とスキルの一つであり、脆弱性があって実害が出たら賠償責任が発生する可能性があります。そのため、セキュアプログラミングの知識や技術を習得することは、非常に重要です。

私は、先日とある勉強会でセキュアプログラミングの講習を受けました。その講習は、とある企業の方が提供されたのですが、非常に有益でした。セキュアプログラミングの講習では、OWASP Top 10をベースに、Webアプリケーションのセキュリティリスクについて解説されていました。OWASP Top 10とは、Webアプリケーションにおける最も重要なセキュリティリスクを10項目にまとめたもので、開発者やセキュリティ担当者にとっての参考資料となっています。2021年版では、新しいカテゴリーや名称の変更があり、現代のWebアプリケーションのセキュリティに対応した内容になっています。

講習では、OWASP Top 10の各項目について、その定義や原因、影響、対策などを詳しく説明してくれました。また、実際の攻撃例やデモを見せてくれたり、演習問題を出してくれたりして、理解を深めることができました。OWASP Top 10を学ぶことで、Webアプリケーションのセキュリティに関する基礎知識や実践的なスキルを身につけることができます。

私は、この講習を受けて、Webアプリケーションのセキュリティリスクについて、より具体的に理解することができました。OWASP Top 10は、セキュアプログラミングの指針となるものであり、定期的に見直しておくことが必要です。私たちは、OWASP Top 10を参考にして、セキュリティを意識したプログラムを作ることが求められています。そのためには、セキュアプログラミングの知識や技術を継続的に学び、向上させることが必要です。

また、講習では以下のような内容が学べました。

  • ・セキュアプログラミングの基本原則やベストプラクティス
  • ・セキュリティ要件の定義や分析の方法
  • ・セキュリティの脅威や攻撃の種類や例
  • ・セキュリティの脆弱性の発見や修正の方法
  • ・セキュリティのテストや評価の方法
  • ・セキュリティの教育や啓発の方法

講習では、実際にプログラムのコードを見て、セキュリティの問題点を指摘したり、改善策を提案したりする演習も行いました。これにより、セキュアプログラミングの知識や技術を実践的に身につけることができました。

更に、SBOMやライブラリの脆弱性をツールで自動生成することが出来る事についても紹介されておりました。SBOM(Software Bill of Materials)とは、ソフトウェアや機器に含まれるソフトウェアコンポーネントの情報をまとめたドキュメントです。SBOMを自動生成するツールは、ソフトウェアの開発言語や使用するライブラリに応じて選ぶ必要があります。例えば、Javaで開発したソフトウェアのSBOMを作る場合、MavenやGradleなどのビルドツールに対応したツールを利用できます。また、コンテナイメージやローカルプロジェクトからSBOMを生成するツールもあります。

ライブラリの脆弱性を自動でレポートするツールは、ソフトウェアのセキュリティを向上させるために有効なツールです。これらのツールは、ソフトウェアが使用しているライブラリのバージョンやライセンスをスキャンし、CVE(Common Vulnerabilities and Exposures)などのデータベースと照合して、脆弱性の有無や重要度を報告します。一部のツールは、脆弱性の修正方法やライブラリの更新方法も提案してくれます。

この講習は、有料でも研修が提供されており、その場合は資料も全て提供頂けるそうです。講義の録画もできるとのことで、繰り返し社内で啓蒙できるようです。自社内でセキュアプログラミングの知識を底上げできて、かつ継続的に研修を実施できる資料や録画データも手に入ることから、利用の価値は大きいと感じました。私は、この講習を受けて、セキュアプログラミングの重要性と難しさを改めて感じました。私たちは、常にセキュリティを意識して、プログラムを作ることが求められています。そのためには、セキュアプログラミングの知識や技術を継続的に学び、向上させることが必要です。

以上となります。

これだけの内容を一から全て書くとなると、結構時間と手間がかかります。
もちろんAIが生成したものをそのまま掲載したわけではなく、おかしな箇所を訂正したり、
ハルシネーションが無いかはチェックしました。
AIの生成したものには、常にハルシネーションが含まれる恐れがあります。
ですので、校正や書いている内容の裏付けを取ったり、ライセンス等に抵触しないか。
また、不適切な表現等が無いかも、人の目によって要チェックとなります。

明日は難易度の高い社内研修でご一緒させて頂いて、研修のチーム作業で色々と
助けて下さったことのある、あの方です。

よろしくお願い致します。

この記事に関連する情報

家具といえば、家具の名産地、福岡県大川市で木が持つ本来の魅力を堪能できる上質な無垢家具を製造する、こもれび家具の通販サイトをオープンしました。 家具好きの方も納得する出来栄えです。是非一度ご覧下さい!
こもれび家具
カテゴリー:
| 投稿者:
DAブログ | DAホールディングス(エクスショップ&ガーデンプラス)