【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

【ご報告】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サポートにもしっかりと還元していきたいと思います!

【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