【IT講師必読】『ソフトウェア・ファースト』で学ぶ、次世代エンジニアの育成法とキャリア戦略


プログラミングスクールの講師や社内研修の担当者など、IT人材の育成に携わる皆さん。日々の指導の中で、「受講生が言われた仕様通りにコードを書くだけになっていないか」「よりビジネスに貢献できるエンジニアを育てるにはどうすればいいか」と悩むことはありませんか?

そんなIT講師の方々にぜひ読んでいただきたいのが、及川卓也氏の著書『ソフトウェア・ファースト あらゆるビジネスを一変させる最強戦略』です。

本書は、単なる技術解説書ではなく、ITを活用して事業やプロダクト開発を進めるための「マインドセット」や「組織・個人のあり方」を説いた一冊です。この記事では、IT講師にとって本書が日々の指導や自身のキャリア形成にどのように役立つのか、4つのポイントに絞って解説します。

1. 受講生に「プロダクト志向」を植え付ける指導ができる

開発の現場では、事業サイドの企画職が「何を作るか(What)」を決め、ソフトウェアエンジニアは「どう作るか(How)」だけを考えるという分業が進みすぎることがあります。しかし、これからのエンジニアには、単に仕様通りに実装するだけでなく、「事業の目標やユーザーへの提供価値を最大化するために何が必要か」を考える姿勢が求められます。

IT講師として本書の考え方を取り入れることで、受講生に対して「ビジネスの目的を理解し、自ら提案できるエンジニア(プロダクト志向)」のマインドセットを教えることができます。技術力だけでなく、ユーザーの課題解決に向き合う姿勢を育む指導が可能になります。

2. モダンな開発手法の「背景と思想」を論理的に説明できる

アジャイル開発やDevOpsといった手法を教える際、ただプロセスの形だけを教えても受講生には本質が伝わりません。本書を使えば、なぜ今それらの手法が必要なのかという「背景と思想」を論理的に説明できるようになります。

  • ビジネスモデルの変化: かつてのパッケージソフトのような「作って売り切って終わり」のモデルから、SaaSに代表される「継続利用」が前提のサービスへと移行しています。そのため、リリース後もユーザーの利用状況を把握し、プロダクトを「育てていく」発想が必要になります。
  • 仮説検証の重要性: 現代は何が正解か分からない世界であり、短い反復(イテレーション)を通じて素早く仮説検証を回し、変化に対応していく姿勢がアジャイルの本質です。

このような背景を交えて教えることで、受講生の理解度は飛躍的に深まります。

3. 受講生のキャリア相談に「型」を用いて的確に答えられる

IT講師は受講生からキャリアの相談を受けることも多いでしょう。本書で提示されているキャリア形成の「型」は、的確なアドバイスをするための強力な指針となります。

  • キャリアの3大分類: ソフトウェアエンジニアのキャリアは大きく「エンジニアを極める(技術力)」「エンジニアリングマネジャーを志向する(人・組織のマネジメント)」「プロダクトマネジャーを志向する(プロダクト・ビジネスの成功)」の3つに分類されます。受講生の適性や志向に合わせて、具体的なキャリアパスを提示できます。
  • T型・π型スキルの構築: まずは専門性(縦軸)を深め、次に周辺知識(横軸)を広げる「T型」のスキル構築や、さらに別の専門軸を増やして「π型 パイ型」人材になる重要性をアドバイスできます。
  • 生涯学び続ける姿勢: 技術は常に陳腐化します。例えば、過去にはソフトウェアテストの自動化が進んだことで、手動テストを専門に行う職種がなくなったという事例もあります。一度学んで終わりではなく、生涯にわたって新しいスキルを習得し続ける必要性を啓蒙できます。

4. 講師自身の市場価値を高めるキャリア戦略のヒントになる

本書は、受講生のためだけでなく、IT講師自身のキャリア形成にも大きなヒントを与えてくれます。

  • 100万人に1人の人材を目指す: 藤原和博氏の提唱する「ホップ・ステップ・ジャンプ」のアプローチのように、3つの異なる軸を作ることで希少性の高い人材になる方法が紹介されています。例えば「IT技術」と「教育・マネジメント」という軸に加えて、全く別の専門領域(特定の業界知識など)を組み合わせることで、市場価値の非常に高い希少な講師(自分だけの三角形の面積を最大化するキャリア)を目指すことができます。

まとめ:マインドセットを育てる教育者へ

『ソフトウェア・ファースト』は、プログラミング言語の構文やツールの使い方を教えるだけでなく、その先にある「ビジネス価値を生み出す力」を受講生に伝授するための格好の教科書です。

これからの時代に求められるエンジニアを育成し、同時に講師としての自身のキャリアも磨き上げていきたい方は、ぜひ一度本書を手に取ってみてください。指導の質が一段階上がることを実感できるはずです。

【Google最新のローカルLLM Gemma 4:27b導入】LM Studioでの動作検証と推奨スペック

こんにちは。今回は、Googleから新たにリリースされたローカル実行可能な最新LLM**「Gemma 4:27b」**を早速手元のPCに導入してみました。

実際に動かしてみた動作感や、要求されるマシンスペックについてリアルな所感をお届けします。ローカルLLMの導入を検討している方の参考になれば幸いです。

Gemma 4:27bとは?最大のメリットは「完全無料のAPI」

Gemma 4は、Googleが開発した最新のオープンモデルです。その中でも「27b(270億パラメータ)」は、ローカル環境で動かせるものとしては非常に高性能なクラスに位置します。

ローカルLLMを導入する最大のメリットは、何と言っても**「APIをいくら叩いても無料」**という点です。クラウド型のAIサービス(ChatGPTやClaudeなど)をAPI経由でハードに利用すると、従量課金であっという間にコストが膨らむことがあります。しかし、ローカル実行であれば通信環境も不要で、コストを一切気にせず開発や検証に没頭できます。

今回の検証環境

今回は、手元のノートPCを使ってどこまで動かせるのかをテストしました。

  • PC: Lenovo ThinkPad X1
  • CPU: Intel Core Ultra 7 258V
  • メモリ (RAM): 32GB
  • 実行環境: LM Studio

ローカルLLMを手軽に試すツールとして、今回もGUIで直感的に操作できる**「LM Studio」**を利用しています。モデルのダウンロードからチャット画面の立ち上げまでが非常にスムーズで、初心者から開発者までおすすめのツールです。

実際の動作感:メモリ32GBではギリギリの戦い

結論から言うと、**メモリ32GBの環境では「他のアプリをすべて停止すれば、なんとか動作する」**というレベルでした。

27bクラスのモデルになると、モデル本体の読み込みだけでかなりのメモリ(VRAM/RAM)を消費します。ブラウザやエディタなど、他のアプリケーションを同時に立ち上げているとメモリ不足に陥り、動作が著しく重くなったり、最悪の場合はクラッシュしてしまう可能性があります。

快適に動作させるための推奨スペックは?

今回の検証を踏まえると、Gemma 4:27bを実用的なスピードで、かつ他の作業と並行しながら快適に動作させるためには、PCのメモリは「64GB」はあったほうがよいと感じました。

「とりあえずAIの挙動を試してみたい」という用途であれば32GBでも動かすことは可能ですが、日常的なアシスタントとして常駐させたり、開発用途でガッツリ使う予定の方は、思い切って64GB以上のメモリを積んだPCや、VRAM容量の大きいグラフィックボード(GPU)を搭載したマシンの用意をおすすめします。

まとめ

Googleの最新モデル「Gemma 4:27b」は、ローカルで動くAIとしては非常に魅力的で、コストを気にせず叩き放題なのは大きな武器になります。

ただし、その分要求されるマシンスペックも高くなっています。お使いのPCのメモリ容量と相談しながら、ぜひ一度「LM Studio」経由でその実力を体験してみてください!

#Gemma4:27b #LMstudio

【完全ローカルAI】LM-Studioを導入!Intel Corei7 UltraとGemma 3 (12B)で作る安全・無料のAI環境

最近は便利なクラウド型AIサービスが普及していますが、業務で扱うデータや機密情報をそのまま入力することにはセキュリティ上の懸念が残ります。

そこで今回、自身のPC内で完結するローカルAI環境を構築するために「LM-Studio」を導入しました。外部のサーバーにデータが送信されないため、情報漏洩のリスクなく安全にAIを活用できるのが最大の魅力です。

本記事では、実際のハードウェア構成や使用しているモデル、そして日々の業務での活用方法についてご紹介します。

稼働させているハードウェア環境

ローカルでAIを快適に動かすためには、PCのスペック(特にメモリ)が重要になります。今回は以下の環境でセットアップを行いました。

  • プロセッサ: Intel Core Ultra (258系) ユニファイドメモリ 32GB搭載
  • VRAM割り当て: 18GB

統合メモリの強みを活かし、システムメモリからVRAMとして「18GB」を贅沢に割り当てています。これにより、後述する中規模サイズのAIモデルでも、メモリ不足に陥ることなくスムーズに推論処理を行うことができます。

採用モデル:Google「Gemma 3: 12b」

LM-Studio上で動かすLLM(大規模言語モデル)には、Googleがオープンモデルとして公開している「Gemma 3: 12b」を採用しました。

  • パラメータ数: 120億(12b)

120億という十分なパラメータ数を持っているため、ローカル環境でありながら文脈の理解力や文章生成の精度が非常に高いのが特徴です。18GBのVRAMを確保しているおかげで、このサイズのモデルでも動作がもたつくことなく、実用レベルのレスポンス速度を叩き出してくれます。

ローカルAIの活用方法と導入メリット

実際に導入してみて、以下のような用途で日々の作業効率化に役立てています。

1. セキュリティを担保したテキスト処理

外部ネットワークと通信しないため、機密性の高い情報や、公開前のテキストデータを扱う際にも一切の不安がありません。セキュアな環境が絶対条件となる作業でも、安心してAIのサポートを受けることができます。

2. 課金を気にせず使い放題

クラウドAIのAPIを利用するとトークン数に応じた従量課金が発生しますが、ローカルLLMなら完全無料です。コストを一切気にする必要がないため、思いついた時に何度でもプロンプトを試すことができます。

3. 日常タスクの「ちょっとしたアシスタント」として

高度な推論が必要な複雑なタスクはクラウドの強力なAIモデルに任せつつ、以下のような日常的なタスクはすべてローカルのGemma 3に任せています。

  • 海外の技術ドキュメントやマニュアルの翻訳
  • コードの簡単なエラーチェックや質問
  • 文章の要約や構成案の作成

まとめ

クラウドの最先端AIと、安全でコストゼロのローカルAI。この2つを適材適所で使い分けることで、よりセキュアで効率的な作業環境を構築することができました。

「手元のPCで安全にAIを動かしたい」「API代を節約したい」と考えている方は、ぜひLM-StudioでのローカルLLM導入を試してみてください。

#LMStudio #LLM #Gemma3

【ご報告】17年ぶりの再挑戦!基本情報技術者試験に無事合格しました。

以前よりご指示・ご期待いただいておりました**「基本情報技術者試験」**ですが、本日無事に受験を終え、合格基準をクリアすることができました!

私にとっては、なんと17年ぶりの再受験となります。 新人研修で教壇に立つにあたり、教える側としても改めて最新の「基本」を網羅・アップデートしておく良い機会となりました。試験の結果と今回実践した対策についてシェアしたいと思います。

これから受験を考えている方の参考になれば幸いです。

受験概要と結果

  • 受験日時: 2026年3月2日(月) AM 10:00
  • 受験会場: 品川・高輪テストセンター
  • 学習期間: 2026年2月11日 〜 3月1日(約20日間)

【スコア結果】

  • 午前(科目A): 795点 / 1000点 (※600点以上で合格)
  • 午後(科目B): 710点 / 1000点 (※600点以上で合格)

私が実践した試験対策

今回の学習期間は約20日間。限られた時間の中で効率よく合格ラインを突破するため、過去問とサンプル問題に絞って徹底的にアウトプットを行いました。

科目A(旧:午前問題)の対策

「基本情報技術者試験.com」の過去問道場を活用し、過去5年分の全360問をすべて解きました。 ここで重要視したのは「間違えた問題をすべて見直すこと」です。なぜ間違えたのか、正解以外の選択肢は何を意味しているのかを理解するまで繰り返しました。

科目B(旧:午後問題)の対策

新制度の科目Bはアルゴリズムとプログラミングが中心となるため、以下の3ステップで対策しました。

  1. 過去30年分のアルゴリズム特訓: 基本情報技術者試験.comの午前対策から、「アルゴリズムとデータ構造」の分野に絞って過去30年分(134問)を解き切りました。
  2. 公式サンプル問題の攻略: IPAが公開している科目Bのサンプル問題(令和5年、令和6年、令和7年)をすべて解きました。
  3. 追加演習: 基本情報技術者試験.comに掲載されている科目Bのオリジナルサンプル問題も実施し、実践感覚を養いました。

実際に受験して感じた「気づき」と「傾向」

17年ぶりに受験してみて、試験内容が現代のITトレンドに合わせて大きく変化していることを肌で感じました。

💡 科目Aの気づき:最新トレンドへの適応が必須 AIやDevOpsといった、昨今のIT現場で欠かせない最新のトピックもしっかりと出題されていました。一方で、過去問からの「全く同じ問題の流用(過去問からの出題率)」は以前ほど高くなかった印象です。丸暗記ではなく、用語の本質的な理解が求められます。 本番では時間配分も上手くいき、15分ほど時間を残して余裕を持って終えることができました。

💡 科目Bの気づき:とにかく時間との戦い!基礎の徹底が鍵 科目Bは、キュー、スタック、逆ポーランド記法といったデータ構造の基本事項をきちんと理解しておくことが絶対条件です。 そして何より「時間が足りない」というのが率直な感想です。100分で20問を解くため、1問あたり5分以内というハイペースで処理していく必要があります。配列の構造や添え字(インデックス)の動きを正確に把握し、スピーディーにトレースする力が試されます。

今回、科目Bの対策として「午前問題(旧制度)のアルゴリズムとデータ構造を過去30年分さかのぼって解いたこと」が、本番での素早い思考と正確なトレースに非常に有効に働いたと実感しています。

おわりに

高度なセキュリティ資格などにも挑戦してきましたが、やはり「基本」に立ち返り、アルゴリズムのトレースなどを泥臭くこなす時間は、エンジニアとしても講師としても非常に有意義なものでした。

このフレッシュな受験経験と最新の試験傾向の肌感覚を、春からの新人研修や今後のITサポートにもしっかりと還元していきたいと思います!

【合格体験記】約3週間の勉強でCompTIA PenTest+に合格した方法

【合格体験記】約3週間の勉強でCompTIA PenTest+に合格した方法

約3週間という短期間の集中学習で、サイバーセキュリティの実践的なスキルを証明するCompTIA PenTest+に無事合格しました!

この記事では、私が実践した勉強方法や使用した教材、そして試験当日の心構えなどをシェアします。これから受験を考えている方の参考になれば嬉しいです。


1. 試験の概要と受験時のスペック

まずは、試験の基本情報と、学習開始時点での私の知識レベルについてまとめます。

項目詳細
試験名CompTIA PenTest+ (PT0-002)
問題数最大85問(単一/複数選択、パフォーマンスベーステスト)
試験時間165分
合格ライン750点(100~900点のスコア形式)

受験時の私のスペック(※ご自身の状況に合わせて書き換えてください)

  • CISSP、RISS、CEH、Security+が取得済みでした。
  • 実務でのペネトレーションテスト経験はなし
  • ネットワークの基本(TCP/IPなど)は理解している

2. 使用した教材

3週間という限られた時間だったため、教材を絞って効率的に学習を進めました。

  • 問題集: Udemyの模擬試験問題集をAIで翻訳しながら学習しました。
  • ハンズオン環境: TryHackMe、Hack The Box

3. 約3週間の勉強スケジュール

第1週:全体像の把握とインプット

最初の1週間は、テキストを読み込み、試験範囲の全体像を把握することに努めました。特に、スキャンツール(Nmapなど)のコマンドオプションや、各種脆弱性の特徴などの暗記項目を整理し、基礎固めを行いました。

第2週:問題演習とハンズオン

2週目からはアウトプット中心に切り替えました。問題集を解きながら、間違えた箇所をテキストで復習します。また、実機環境(TryHackMeなど)を活用して、実際のツールの使い方や攻撃手法を視覚的・体感的に学びました。

第3週:模擬試験と弱点補強

最終週は、本番を想定した時間配分で模擬試験に取り組みました。パフォーマンスベーステスト(PBQ)対策として、ログの解析やネットワーク図の読み解きに慣れるよう、苦手分野の底上げを徹底しました。


4. 試験当日の感想とアドバイス

  • PBQ(パフォーマンスベーステスト)は後回しにする: 最初に出題されることが多いPBQは時間がかかるため、まずはフラグを立てて選択問題を一通り解き終えることをお勧めします。
  • Nmapのコマンドは必須: Nmapのスキャンタイプや出力オプションに関する問題は頻出です。確実に押さえておきましょう。
  • ツールの出力結果に慣れる: 各種スキャンツールや脆弱性診断ツールの出力結果を見て、何が起きているのかを読み解く力が求められます。

5. まとめ

3週間という短い期間でしたが、集中して取り組むことで無事合格することができました。PenTest+は単なる知識だけでなく、実践的な視点が求められる非常にやりがいのある試験です。

これから受験される皆さんの健闘を祈っています!

【合格体験記】CompTIA SecurityXに合格しました!

こんにちは。ちゅらセキュアクラウドの山口雅樹です。 日頃は新入社員向けのIT研修や、情報セキュリティ専門の講義などに登壇しておりますが、自己研鑽の一環として受験していた「CompTIA SecurityX」に無事合格いたしました!

今回は、これから受験を検討されている方や、最新のセキュリティ資格に興味がある方に向けて、SecurityXの概要や難易度、実際の試験で感じた出題傾向などをシェアしたいと思います。

CompTIA SecurityXとは?

CompTIA SecurityXは、ITセキュリティの現場で求められる高度な実践的スキルを証明する、CompTIAの最上位レベルの認定資格です。(以前は「CASP+」という名称で親しまれていましたが、名称が変更されました。)

単なる知識の暗記ではなく、複雑な環境下でのセキュリティ要件の策定や、インシデントへの対応、リスク管理、そしてビジネスニーズとセキュリティのバランスを取るアーキテクチャの設計など、シニアレベルのセキュリティプロフェッショナルに求められる総合的な判断力が問われます。

気になる難易度は?

結論から言うと、難易度は「かなり高い」と感じました。

一般的な基礎資格とは異なり、「この用語の意味は何か?」といった単純な問題は少なく、具体的なシナリオベースの設問が中心です。「この状況で、最も適切でビジネスへの影響が少ないセキュリティ対策はどれか?」といった、現場での実務経験や深い理解に基づいた応用力が試されます。

出題傾向:AIやソフトウェア開発分野からの出題も!

今回の受験で特に印象的だったのは、出題範囲の広さと最新トレンドの反映です。 従来のネットワークやインフラのセキュリティにとどまらず、AI(人工知能)に関するセキュリティリスクや、ソフトウェア開発のプロセス(セキュアコーディングやDevSecOpsなど)に関する問題もしっかりと出題されました。

現代のセキュリティは、インフラエンジニアだけでなく、開発者やAIを導入するビジネス側とも密接に関わっています。SecurityXは、そうした現代のITシステム全体の包括的な脅威を理解し、対策を講じる能力が求められていることを強く実感しました。

勉強時間は1か月程度でした

今回の私の勉強時間は、およそ1ヶ月程度でした。

期間だけを見ると短く感じるかもしれませんが、これは日頃からセキュリティ研修の講師として基礎や最新動向をアウトプットしていることや、他のセキュリティ系資格で培ったベースの知識があったことが大きく影響していると思います。

ゼロから挑戦する場合は、もう少し余裕を持った学習計画を立てることをおすすめします。特に、各セキュリティ技術が「なぜ必要なのか」「どう機能するのか」という根本的な仕組みの理解に時間をかけると良い結果に繋がるはずです。

おわりに

今回のSecurityX合格で得た最新の知見や、AI・ソフトウェア開発領域にまで及ぶセキュリティの考え方は、今後の研修や講義の中にもしっかりと還元していきたいと思います。

情報セキュリティ研修やJava、アルゴリズムなどのIT技術研修のご相談は、ぜひ当方のホームページよりお気軽にお問い合わせください!

#SecurityX #CompTIA

▼ちゅらセキュアクラウド 公式ホームページ https://yamachan.com

【PowerShell】日付毎にファイルをサブフォルダに移動

スマートフォンからパソコンに動画や写真を移すと、一つのフォルダに数千ものファイルが溜まってしまい、目的のファイルを探すのが大変になることはありませんか?

この問題を解決するため、AIのGeminiに依頼して、大量のファイルを撮影日ごとに自動でフォルダ分けするPowerShellスクリプトを作成してもらいました。

このスクリプトを使えば、乱雑になりがちなフォルダ内がすっきりと整理され、過去のデータも簡単に見つけられるようになります。

# -----------------------------------------------------------------------------
# 説明: 画像ファイルを撮影日時のフォルダに整理するスクリプト
# -----------------------------------------------------------------------------

# 1. 画像が保存されているフォルダのパスを指定してください
$targetFolder = "C:\Users\YourUser\Pictures\Camera Roll" # 実際のフォルダパスに書き換えてください

# 2. 処理対象とするファイルの拡張子 (必要に応じて追加・削除してください)
$imageExtensions = @(".jpg", ".jpeg", ".png", ".heic", ".cr2", ".nef", ".arw", ".mov", ".mp4")

# -------------------------- ここから下は変更不要 --------------------------

# フォルダの存在チェック
if (-not (Test-Path -Path $targetFolder)) {
    Write-Error "エラー: 指定されたフォルダが見つかりません。パスを確認してください: $targetFolder"
    return
}

Write-Host "📁 処理を開始します。対象フォルダ: $targetFolder" -ForegroundColor Green

try {
    # Shellオブジェクトを使用してファイルの詳細情報にアクセスします
    $shell = New-Object -ComObject Shell.Application
    $folder = $shell.NameSpace($targetFolder)

    # 「撮影日時」の項目が何番目にあるかを探します (環境により異なるため)
    $dateTakenIndex = -1
    for ($i = 0; $i -lt 300; $i++) {
        $header = $folder.GetDetailsOf($null, $i)
        if ($header -eq "撮影日時" -or $header -eq "Date taken") {
            $dateTakenIndex = $i
            break
        }
    }

    # フォルダ内の対象ファイルを一つずつ処理
    Get-ChildItem -Path $targetFolder -File | Where-Object { $imageExtensions -contains $_.Extension.ToLower() } | ForEach-Object {
        $file = $_
        $dateTaken = $null

        # 撮影日時を取得
        if ($dateTakenIndex -ne -1) {
            $folderItem = $folder.ParseName($file.Name)
            if ($folderItem) {
                # GetDetailsOfは文字列を返す
                $dateValue = $folder.GetDetailsOf($folderItem, $dateTakenIndex)
                # 文字列からDateTimeオブジェクトへの変換を試みる
                if (-not [string]::IsNullOrWhiteSpace($dateValue)) {
                    # 日付文字列に含まれることがある特殊文字を除去
                    $cleanedDateString = $dateValue -replace '[\u200E\u200F\u202A-\u202E]',''
                    try {
                        $dateTaken = [datetime]::Parse($cleanedDateString)
                    } catch {}
                }
            }
        }

        # 撮影日時が取得できなかった場合は、ファイルの最終更新日時を使用
        if ($null -eq $dateTaken) {
            $dateTaken = $file.LastWriteTime
            Write-Warning "[$($file.Name)] の撮影日時が取得できませんでした。代わりに更新日時 (${dateTaken}) を使用します。"
        }

        # 移動先のフォルダ名を「yyyyMMdd」形式で作成
        $subFolderName = $dateTaken.ToString("yyyyMMdd")
        $destinationFolder = Join-Path -Path $targetFolder -ChildPath $subFolderName

        # 移動先フォルダがなければ作成
        if (-not (Test-Path -Path $destinationFolder)) {
            Write-Host "新しいフォルダを作成します: $subFolderName" -ForegroundColor Cyan
            New-Item -Path $destinationFolder -ItemType Directory -Force | Out-Null
        }

        # ファイルを移動
        $destinationPath = Join-Path -Path $destinationFolder -ChildPath $file.Name
        Move-Item -Path $file.FullName -Destination $destinationPath
        Write-Host "'$($file.Name)' -> '$subFolderName'"
    }
}
catch {
    Write-Error "予期せぬエラーが発生しました: $_"
}
finally {
    # COMオブジェクトを解放
    if ($shell) {
        [System.Runtime.InteropServices.Marshal]::ReleaseComObject($shell) | Out-Null
        Remove-Variable shell -ErrorAction SilentlyContinue
    }
}

Write-Host "✅ すべての処理が完了しました。" -ForegroundColor Green

実行完了すると8桁の表現(例 20250716)のフォルダ別にファイルが移動されます。利用にあたっては、自己責任でお願いします。 #gemini #powershell

【PowerShell】Geminiを使ったファイル整理方法

Google AIであるGeminiを使って未整理のフォルダのファイルを種類別にフォルダに分類するスクリプトを作成してみました。

古いHDDの大掃除が完了!✨ 中身がごちゃごちゃで手付かずでしたが、Geminiに『ファイルを種類別に仕分けるスクリプト作って!』とお願いしたら、一瞬で解決しました。

ExcelはExcelフォルダ、画像は画像フォルダへ自動で仕分けてくれるので、要らないファイルを見つけるのがすごく楽に! これ、月別整理や重複ファイル削除にも応用できそう。AI活用、すごい便利! #データ整理 #Gemini #PowerShell

次のコードはPowerShellで動作します。(ファイルは 拡張子.ps1で保存してください。UTF-8のBOM付で保存します。)wordや、excel、動画やパワーポイントのフォルダーに分類してファイルを移動します。

# 1. 基本設定
# スクリプトを置いた場所を基準に動作します
$basePath = Get-Location
$sourceFolderName = "整理したいファイルのフォルダを指定"
$sourceFolderPath = Join-Path $basePath $sourceFolderName

# 移動先のフォルダ名を定義します (フォルダ名は自由に変更できます)
$destFolders = @{
    excel      = @(".xlsx", ".xls", ".xlsm", "csv")
    movie      = @(".mp4", ".mov", ".avi", ".wmv", ".mkv")
    picture    = @(".jpg", ".jpeg", ".png", ".gif", ".bmp", ".heic", ".raw") # "picuture"を"picture"に修正しました
    pdf        = @(".pdf")
    powerpoint = @(".pptx", ".ppt")
    word       = @(".docx", ".doc")
    etc        = "その他" # ここで定義されていない拡張子のファイルが移動されるフォルダ
}

# 2. 移動先フォルダの作成
# 定義したフォルダが存在しない場合に作成します
Write-Host "--- フォルダの準備 ---" -ForegroundColor Yellow
foreach ($folder in $destFolders.Keys) {
    $path = Join-Path $basePath $folder
    if (-not (Test-Path $path)) {
        New-Item -ItemType Directory -Path $path
        Write-Host "作成しました: $path"
    }
}

# 3. ファイルの移動処理
Write-Host "`n--- ファイルの移動を開始します ---" -ForegroundColor Yellow
# サブフォルダ内もすべて検索 (-Recurse) し、ファイルのみを対象 (-File)
$files = Get-ChildItem -Path $sourceFolderPath -Recurse -File

foreach ($file in $files) {
    $extension = $file.Extension.ToLower()
    $moved = $false

    # 各カテゴリの拡張子に一致するかチェック
    foreach ($category in $destFolders.Keys) {
        if ($category -ne "etc" -and $destFolders[$category] -contains $extension) {
            $destinationFolder = Join-Path $basePath $category
            $moved = $true
            break # 一致したらループを抜ける
        }
    }

    # どのカテゴリにも一致しなかった場合、etcフォルダに設定
    if (-not $moved) {
        $destinationFolder = Join-Path $basePath "etc"
    }

    # 移動先でのファイルパスを決定 (同名ファイル対策)
    $destinationFile = Join-Path $destinationFolder $file.Name
    $counter = 1
    # もし移動先に同名のファイルが存在したら、ファイル名に番号を付けて重複を回避
    while (Test-Path $destinationFile) {
        $newName = "{0}_{1}{2}" -f $file.BaseName, $counter, $file.Extension
        $destinationFile = Join-Path $destinationFolder $newName
        $counter++
    }

    # ファイルを移動
    try {
        Move-Item -Path $file.FullName -Destination $destinationFile -ErrorAction Stop
        Write-Host "移動: $($file.Name)  ->  $($destinationFolder)" -ForegroundColor Green
    }
    catch {
        Write-Host "エラー: $($file.FullName) の移動に失敗しました。" -ForegroundColor Red
        Write-Host $_.Exception.Message -ForegroundColor Red
    }
}

# 4. 空になったサブフォルダの削除 (任意)
# 下記のコメントアウトを解除すると、ファイルがなくなった後の空のフォルダをすべて削除します
# Get-ChildItem -Path $sourceFolderPath -Recurse -Directory | Where-Object { (Get-ChildItem -Path $_.FullName -Recurse -File).Count -eq 0 } | Remove-Item -Recurse -Force
# Write-Host "`n--- 空のフォルダを削除しました ---" -ForegroundColor Yellow


Write-Host "`n--- すべての処理が完了しました ---" -ForegroundColor Yellow

Geminiを使うと瞬時に便利なスクリプトを作成してくれるので大変便利です。

次のフォルダーに分類されます。

#GEMINI #PowerShell #AI