
はじめに
ついに OpenAIからオープンウェイトのLLM、”gpt-oss”シリーズがリリースされました。
クラウドを使わずローカル実行できるオープンウェイトのLLMはセキュリティを重視する企業にとって、今後の活用が期待されるAIです。
gpt-ossには20bと120bの2種類が存在しますが、このうち比較的小サイズの20bについてはメモリ16GBでも動作すると言われています。私の使用しているマシンがM3 MacBook Airの16GBモデルなのでこのマシンでも動かせそうです。
ということで主流の実行環境であるOllamaとLMstudioの2つの環境で試してみました。
結果は
- Ollama(Ver. 0.11.4) → 2~3 tokens / sec
- LMstudio(Ver. 0.3.23) → 20 tokens / sec
となりました。2025年8月14日現在、LMstudioなら実用的な速度で動きます。
使用したマシン
M3チップ搭載のMacBook Airです。
- 4つの高性能コアと4つの高効率コアを搭載した8コアCPU
- GPU 10コア
- NPU 16コア
- メモリ帯域 100GB/s
メモリは16GBです。
LMstudio結果

21.56 tokens / s とストレスを感じさせない速さです。素晴らしい。
「Reasoning Effort」で推論の深さを選べるのも良いです。

次に以下のクエリを試しました。
プログラム初心者にプログラムとは何か、を説明するためのアナロジーとして、「運動会のプログラム(式次第)」を題材にした説明を考えて
以下が回答です。
<|channel|>analysis<|message|>Need analogy.<|end|>
<|start|>assistant<|channel|>final<|message|>## 「プログラミング=運動会のプログラム(式次第)」というアナロジー
### 1. 前提:何かを**実行させるための指示書**
- **運動会のプログラム**は、朝から夜までにどんな競技が行われるか、誰がリレーを引き継ぐか、タイムテーブルをまとめた紙です。
- **コンピュータープログラム**も同じく「何をいつどう実行するか」を書いた指示書(コード)です。
---
### 2. プログラムの構成要素と運動会プログラムの要素
| コンピュータープログラム | 運動会の式次第 |
|---------------------------|-----------------|
| **変数** (名前付き箱) | **競技名**(例:リレー、百歩走)<br>「何をやるか」を決めている。 |
| **データ型** | 「競技の種類」(短距離走・長距離走・球技など)<br>実行方法が異なるので区別する。 |
| **関数/メソッド** | **リレーの交代手順**<br>同じ作業を何度も繰り返すときに使う。 |
| **条件分岐(if)** | 「天気が雨なら競技を中止」<br>状況によって行動を変える指示。 |
| **ループ(for, while)** | 「3回リレーを繰り返す」「10人ずつ順番に走る」<br>同じことを何度も実施する。 |
| **入力/出力** | 学生が「結果表」を提出したり、観客が「拍手」で応援したりする動き。 |
| **コメント** | 「※注意:足場に滑り止めを貼る」<br>後で見たときにわかりやすく書いておく。 |
---
### 3. 実際の流れを想像してみよう
1. **朝礼(プログラム開始)**
- コンピュータは「スタート!」というシグナルを受け取る。
- 運動会では、先生が「集合!」と叫ぶ。
2. **リレー競技(関数の呼び出し)**
- 1番選手がバトンを受け取り走り、終点で次の選手に渡す。
- プログラムでも `relay()` 関数を呼び出し、その中で別の関数を実行する。
3. **天候変更(条件分岐)**
- 雨が降ってきたら「競技を延期」。
- コードでは `if (rain) { postpone(); }` のように書く。
4. **タイムテーブル(ループ)**
- 1番から10番まで順に走る。
- `for (int i = 0; i < 10; ++i) { run(i); }` と同じ感覚。
5. **結果発表(出力)**
- スコアカードを観客に見せる。
- コンピュータは「print(result)」で画面に表示する。
---
### 4. なぜこのアナロジーが役立つのか
| 項目 | アナロジーのメリット |
|------|---------------------|
| **直感的** | 学生は運動会を経験しているので、構造や流れをすぐにイメージできる。 |
| **具体性** | 抽象概念(関数・ループ)が「リレー」「タイムテーブル」など具体的な行動に置き換わり、理解しやすい。 |
| **記憶に残りやすい** | 実際の体験と結びつけることで、後でプログラムを思い出しやすくなる。 |
---
### 5. まとめ
> 「コンピュータープログラムは運動会の式次第と同じ。どんな競技(処理)をいつ誰が行うかを書いた指示書です。変数=競技名、関数=リレーの交代、条件分岐=天候判断、ループ=何度も繰り返す走る順番… こうしてみんなで同じ「大会」をスムーズに進められるようになる。」
このアナロジーを使えば、プログラムがただのコード列ではなく、**人と機械が協調するためのレシピ**だという感覚を初心者にも伝えやすくなります。謎の競技「百歩走」などが入ってますが、言いたいことはわかる感じです。これで14.40 tokens / sでした。LMstudioなら十分実用的な速度で動きました。
Ollma結果
次にOllamaを使用した結果です。
まず、モデルをロードするのに1分くらいかかります。最初だけですが待たされる印象です。

推論が始まります。LMstudioと違って推論の深さは選べないようです。

誤った結論になってしまいました。

何回か試しましたが、この質問に対しては正解する時もあれば、間違えてしまう時もありました。GPT-4oでも間違えたりするので、そこまで気にする必要もないでしょう。
問題は生成速度で、この環境だと 2~3 tokens/秒 程度しか出ません。少なくとも対話的に使用するには厳しい速度でした。
verboseコマンドで出力したstatsはこんな感じです。生成速度は2.77 tokens/sでした。
total duration: 2m19.005259917s
load duration: 90.461ms
prompt eval count: 82 token(s)
prompt eval duration: 58.673609792s
prompt eval rate: 1.40 tokens/s
eval count: 222 token(s)
eval duration: 1m20.235827833s
eval rate: 2.77 tokens/s次にLMstudioと同じく以下の運動会のクエリを試しました。
プログラム初心者にプログラムとは何か、を説明するためのアナロジーとして、「運動会のプログラム(式次第)」を題材にした説明を考えて
以下が回答です。
Thinking...
We need to write an analogy for explaining "what a program is"
to a beginner using "運動会のプログラム(式次第)" which is the
program schedule for a sports day. So we should describe how a
program in computing is like a schedule of events, giving
instructions, step by step, etc. Use everyday language. Provide
details, maybe mention how the program is a list of instructions
that the computer follows, similar to a teacher's script for the
sports day. Show the concept of sequence, conditional logic
(e.g., if something happens, go to next event). Also emphasize
that the program is not the event itself, but the plan. Use
analogies: athletes are data, the coach is CPU, etc. Provide
explanation in Japanese because user wrote Japanese. Should be
friendly for beginners. Let's produce a concise but thorough
analogy. Also maybe mention that the program is written in a
language like Python or Java, similar to how the sports day
program might be written in Japanese. Good.
...done thinking.
## プログラムとは何か?
### それは「運動会のプログラム(式次第)」と同じなんです
---
### 1. 何が「プログラム」か
- **コンピュータに「何をしてほしいか」を書き込むもの**
- 文字列(コード)で「ここでこうする」「次にこうする」と順番・条件
を指示する
### 2. 運動会の式次第を想像してみてください
| 順番 | イベント | 何が起きるか |
|------|----------|--------------|
| 1 | 乾杯 | みんなで乾杯して開始 |
| 2 | かけっこ | 走者がスタート → ゴール |
| 3 | 続き(万歩走など) | 条件に応じて次の種目へ |
| 4 | 受付 | 参加者が集合し次のイベントへ |
| 5 | 休憩 | 一息つく |
| … | … | … |
式次第は **「まず乾杯して、次にかけっこをして、万歩走をして…」
** という手順を *明文化* したものです。
---
### 3. それをプログラムに置き換えると
| 運動会 | コンピュータ |
|--------|--------------|
| スタートラインで **スタート** | **プログラムの最初の命令** |
| **走者が走る**(走る速度、時間を記録) | **処理**(計算やデータ
操作) |
| **ゴール**でタイムを測る | **結果を出力**(画面に表示) |
| **条件付きで次の種目へ**(例:一部の選手だけが走る) | **分岐
**(if, switch など) |
| **休憩** | **待機**(sleep, pause など) |
| **フィニッシュ**で全員が集まる | **終了**(プログラムの終わり)
|
- **順序**: イベントが決められた順に起こるように、プログラムは命令
を上から順に実行します。
- **条件**: 例えば「走者の名前が『太郎』なら走者に合図を出す」とい
うように、条件分岐が必要なときは `if` 文で書きます。
- **ループ**: 何度も同じ種目を行う場合は `for` や `while` で繰り返
しを書きます。
- **データ**: 走者のタイム、選手の名前などは変数に保存し、後で使え
るようにします。
---
### 4. なぜ式次第を例にするのがいいか
| 項目 | 運動会の式次第 | プログラム |
|------|----------------|-----------|
| **誰が読むか** | 先生・運営者 | プログラマ |
| **何を作るか** | 文字で書かれた紙 | 文字列(コード) |
| **実行者** | 先生(指示役) | コンピュータ |
| **結果** | 競技がスムーズに進む | 画面に結果やデータが表示される
|
「式次第」を書くときは「誰が何を、いつ行うか」を明確にしないと、イ
ベントが混乱します。プログラムも同じです。明確な手順を書けば、コン
ピュータはそれを正しく実行します。
---
### 5. まとめ:プログラムは「運動会の式次第」のデジタル版
- **手順・順序**を記録した紙 → **コード**
- **条件・ループ**で「もし〜なら〜する」を書く → `if` や `for`
- **データ**(タイム、名前)を変数に保存して再利用 → 変数
- **実行者**はコンピュータで、書いた手順を順番に実行
**だから、プログラムとは「コンピュータに対して『こうやって何をして
ほしいか』を指示する計画書(式次第)」。**
初心者がこのイメージを持てれば、コードを書き始めるときに「まずはス
テップバイステップで書こう」と考えやすくなります。ぜひ、運動会のプ
ログラムを思い浮かべながら、プログラムの書き方に挑戦してみてくださ
い!運動会が乾杯から始まったり、”万歩走”なる謎の競技があったりしますが、一応それらしき回答にはなっています。
が、いかんせん生成速度が遅すぎるのがネックですね。今後のOllamaのアップデートに期待しておきましょう。
次にGemma3 4Bに同じことを聞いてみました。
## プログラミングって、運動会のプログラム(式次第)
運動会のプログラムを想像してみて。
**まず、運動会にはたくさんの人が参加するよね?**
* **選手**:プログラムを実行する「プログラム」に相当します。走ったり、跳ん
だり、投げたり、色んなことをします。
* **監督・コーチ**:プログラムを指示する「コード」に相当します。選手に「走
るんだ!」「跳ぶんだ!」と指示を出します。
* **観客**:プログラムの結果を待つ「実行結果」に相当します。試合の結果を見
て、感動したり、応援したりします。
**運動会のプログラムは、順番に色んなことが行われるよね?**
* **始まり(初期化)**: 運動会のオープニングで、会場が整ったり、選手たち
がウォーミングアップをするように、プログラムの最初に、変数の値を設定したり、
必要なものを準備したりします。
* **順番(順序)**: 陸上競技のスタートからゴール、綱引き、玉入れなど、順
番に競技が行われるように、プログラムの命令は順番に実行されます。
* **条件(条件分岐)**: 試合で、時間制限がある場合や、点数が一定以上にな
った場合に、戦略を変えるように、プログラムでは「もし〜ならば、〜する」「そう
でなければ、〜する」といった条件分岐を使って、状況に応じて処理を変えます。
* **繰り返し(繰り返し処理)**: 同じ種目(例:100m走)を何度も繰り返し行
うように、プログラムでは「繰り返して〜する」という命令を使って、同じ処理を何
度も実行できます。
* **終わり(終了)**: 閉会式で、結果報告や表彰式が行われるように、プログ
ラムは最後に「終了」という命令で停止します。
**そして、運動会のプログラムは、一つ一つの要素(種目)がきちんと組み合わさっ
て、素晴らしいパフォーマンスを生み出すよね?**
* プログラムも同じで、色々な命令(コード)を組み合わせることで、複雑な処理
を実行できます。
* 例えば、「変数に1を足す」「その結果を表示する」といった、小さな命令を組
み合わせることで、計算やデータ処理ができるようになります。
**「式」は、運動会で選手が記録を出すこと、プログラムでは計算結果を出すことと
同じなんだ。**
* 運動会で「タイムを計測する」ことは、プログラムで「計算を行う」ことに対応
します。
**つまり、プログラミングは、運動会のプログラムを組み立てるようなもの。**
* 色々な命令(コード)を組み合わせて、プログラムを作り、それによってコンピ
ュータに指示し、コンピュータが指示に従って動作することで、様々な処理を実行で
きる、ということです。
**プログラムを学ぶことは、運動会のプログラムを理解し、より良いパフォーマンス
を生み出すための知識と技術を習得することに似ています。**
**何か質問はありますか?**
---
この説明で、プログラミングの概念をよりイメージしやすくなったでしょうか? もし、まだ疑問点があ
れば、遠慮なく聞いてください。Gemma 3 4Bならこの程度の回答は数十秒で生成できます。内容的には流石にサイズが20bで5倍大きいgpt -ossの方がしっかり書けていますが、生成速度で圧勝ですね。
Gemma 3 4Bの実行結果です。30 tokens / s で生成できています。
total duration: 22.762749291s
load duration: 73.750125ms
prompt eval count: 37 token(s)
prompt eval duration: 303.330917ms
prompt eval rate: 121.98 tokens/s
eval count: 683 token(s)
eval duration: 22.384415958s
eval rate: 30.51 tokens/s終わりに
LMstudioであれば、gpt-ossはローカルLLMとして最有力候補になりそうです。Ollamaでもアップデートが入れば高速化するかもしれません。
120bを動かすためにM4Max MacBook Pro 128GBが欲しくなりますね。


コメント