手元の PC やサーバーで文字起こしするなら、faster-whisper(Whisper を CTranslate2 という高速な推論ライブラリで動かす実装)が手軽です。 pip install faster-whisper だけで入り、ffmpeg も別に入れなくて済みます。OpenAI の公式実装 openai-whisper は PyTorch で動きます。

from faster_whisper import WhisperModel

model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe("meeting.mp3", language="ja", beam_size=5, vad_filter=True)
for seg in segments:
    print(f"[{seg.start:7.2f} → {seg.end:7.2f}] {seg.text}")
比べる点 openai-whisper faster-whisper OpenAI の音声 API
動く場所 手元(PyTorch) 手元(CTranslate2) OpenAI のサーバー
入れ方 pip install -U openai-whisper + ffmpeg pip install faster-whisper pip install openai
速さ(README の small・CPU) 6分58秒 2分37秒(int8 は 1分42秒) -
料金 無料(電気代・GPU) 無料(電気代・GPU) 1分あたり $0.003〜$0.006 など
音声を外に出すか 出さない 出さない 送る

確認環境:faster-whisper 1.2.1(pip の最新版)・ctranslate2 4.8.2・av 18.1.0・onnxruntime 1.31.0・Python 3.11.15・ffmpeg(Linux、2コア・メモリ 7GiB・GPU なし)。openai-whisper は GitHub の v20250625 タグ(PyPI の最新版 20250625 と同じ)のソースで、引数・既定値・字幕の書き出しを確かめました。手元で動かしたのは、音声の読み込み(decode_audio)、faster-whisper に入っている Silero VAD(声のある区間を見つける小さなモデル)での区間の検出、SRT の書き出し(openai-whisper の WriteSRT との比較)、モデルが取得できないときのエラー、ffmpeg での分割です。音声は faster-whisper のリポジトリの試験用の英語音声(11秒・203秒)を使いました。速さの数字は faster-whisper の README の測定値、モデルの表は openai/whisper の README、OpenAI の API はドキュメントと openai 3.29.0 の SDK の型の定義に基づきます(確認日 2026年10月13日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Whisper文字起こし|Pythonコードとfaster-whisperの速さ比較」

モデルの大きさとメモリ(公式の表)

モデルは大きいほど精度が上がり、遅く、メモリを使います。 日本語では .en(英語専用)でない多言語モデルを使います。

モデル パラメータ数 必要 VRAM 相対速度(large を1)
tiny 39M 約1GB 約10倍
base 74M 約1GB 約7倍
small 244M 約2GB 約4倍
medium 769M 約5GB 約2倍
large(large-v3) 1550M 約10GB 1倍
turbo(large-v3-turbo) 809M 約6GB 約8倍

openai/whisper の README の表です。相対速度は A100 の GPU で英語の音声を処理したときの値で、言語や話す速さで変わると注記されています。turbo は large-v3 を速くしたモデルで、翻訳(英語への訳)には学習されていないとあります。

faster-whisper 1.2.1 では、名前を渡すと Hugging Face から CTranslate2 形式のモデルを取得します(utils.py の対応表)。

渡す名前 取得するリポジトリ
tiny〜medium Systran/faster-whisper-<名前>
large-v3・large Systran/faster-whisper-large-v3
turbo・large-v3-turbo mobiuslabsgmbh/faster-whisper-large-v3-turbo
distil-large-v3.5 distil-whisper/distil-large-v3.5-ct2

available_models() で返った名前は19個でした(tiny.en から turbo まで)。

どれを選ぶかの目安

用途 目安
まず動くか試す tiny・base
CPU で会議の録音を文字に small か medium(compute_type="int8")
GPU があり精度を上げたい large-v3
GPU で速さと精度の釣り合い turbo

openai-whisper の完成コード

pip install -U openai-whisper
# ffmpeg を別に入れる(例:sudo apt install ffmpeg / brew install ffmpeg)
import whisper
from whisper.utils import get_writer

model = whisper.load_model("small")          # 初回は ~/.cache/whisper に保存
result = model.transcribe(
    "meeting.mp3",
    language="ja",
    beam_size=5,                              # Python からは既定が None(貪欲法)
    fp16=False,                               # CPU なら False(警告を出さない)
    initial_prompt="以下は、社内の定例会議の録音です。",
)

print(result["text"])
for seg in result["segments"]:
    print(f"[{seg['start']:7.2f} → {seg['end']:7.2f}] {seg['text']}")

get_writer("srt", ".")(result, "meeting.mp3")  # meeting.srt を書き出す

コマンドでも動きます。

whisper meeting.mp3 --model small --language Japanese --output_format srt

Python の transcribe() とコマンドでは、ビームサーチの既定が違います。 v20250625 のソースでは、コマンドの --beam_size の既定は 5 ですが、Python の DecodingOptions の beam_size の既定は None(毎回いちばん確からしい語を選ぶ貪欲法)です。コマンドと同じ結果を Python で得るには beam_size=5 を付けます。CPU で fp16 を指定しないと、FP16 is not supported on CPU; using FP32 instead の警告が出ます(ソースの文)。

faster-whisper の完成コード

pip install faster-whisper   # ffmpeg は不要(PyAV が同梱のライブラリで読む)
from faster_whisper import WhisperModel

model = WhisperModel(
    "small",
    device="cpu",            # GPU なら "cuda"
    compute_type="int8",     # GPU なら "float16" か "int8_float16"
    cpu_threads=4,           # 0 なら既定
)

segments, info = model.transcribe(
    "meeting.mp3",
    language="ja",
    beam_size=5,
    vad_filter=True,
    initial_prompt="以下は、社内の定例会議の録音です。",
)
print(info.language, info.language_probability, info.duration, info.duration_after_vad)

lines = []
for seg in segments:                      # ここで初めて文字起こしが進む
    print(f"[{seg.start:7.2f} → {seg.end:7.2f}] {seg.text}")
    lines.append(seg.text.strip())
text = "\n".join(lines)

segments はジェネレータです。 for で回すか list(segments) にするまで、文字起こしは始まりません(README の説明)。info には、言語・その確からしさ・音声の長さ・VAD で無音を除いたあとの長さが入ります。

GPU で動かすには、README によると CUDA 12 用の cuBLAS と cuDNN 9 が必要です(最新の ctranslate2 は CUDA 12・cuDNN 9 のみ対応)。手元の CPU で使える compute_type は int8・int8_float32・float32・int16 の4つで、float16 は含まれていませんでした(ctranslate2.get_supported_compute_types("cpu") の結果)。

既定値の違い(ソースで確認)

引数 openai-whisper(Python) faster-whisper faster-whisper の Batched
beam_size None(貪欲法) 5 5
temperature 0.0〜1.0 を 0.2 刻み(失敗したら上げる) 同じ 同じ
condition_on_previous_text True True True
vad_filter 無し False True
without_timestamps - False True
compression_ratio_threshold 2.4 2.4 2.4
no_speech_threshold 0.6 0.6 0.6
word_timestamps False False False
精度(型) fp16=True(CPU では FP32) compute_type="default" 同じ

速さを比べるときは、beam_size をそろえないと公平になりません。faster-whisper の README にも、beam size・スレッド数・WER(単語の誤り率)をそろえて比べるよう注意があります。

日本語の精度を上げる設定

設定 書き方 効果と注意
言語を決める language="ja" 指定しないと、最初の30秒で言語を推定する(openai-whisper のソースの文)。短い前置きが英語だと誤ることがある
ビームサーチ beam_size=5 候補を5本持って選ぶ。遅くなるが誤りが減りやすい
用語と書き方の見本 initial_prompt="..." 固有名詞の表記をそろえる。前の文脈として読まれるので、見本の文の書き方に出力が寄ることがある
無音を飛ばす vad_filter=True 無音で同じ文をくり返す(幻聴)のを減らす。速くもなる
くり返しを止める condition_on_previous_text=False 前の出力を次の入力にしない。同じ文のループが続くときに使う
用語の候補(faster-whisper) hotwords="RJC 経営戦略推進室" 出てほしい語を渡す。prefix と同時には効かない
モデルを上げる small → medium → large-v3 いちばん効く。時間とメモリが増える
segments, info = model.transcribe(
    "meeting.mp3",
    language="ja",
    beam_size=5,
    vad_filter=True,
    vad_parameters={"min_silence_duration_ms": 500},
    initial_prompt="以下は、経営戦略推進室の定例会議です。議題は採用、広報、予算です。",
    condition_on_previous_text=False,     # 同じ文のくり返しが出るときに
)

initial_prompt の仕組みと長さの上限

initial_prompt は「この前にこう話していた」という文脈として、最初の区間(30秒)の前に入れる文です。 指示(「句読点を付けて」など)として読まれるのではなく、続きの文として扱われます。そのため、命令文より、望む書き方の見本の文を書くほうが効きます。

項目 openai-whisper faster-whisper
効く範囲 最初の区間。condition_on_previous_text=True なら、そのあとの出力に引き継がれる 同じ
毎回入れる carry_initial_prompt=True(v20250625 にある) 引数は無い
長さ 文脈として使うのは最大 223 トークン(n_text_ctx // 2 - 1) 最大 223 トークン(max_length // 2 - 1、max_length は 448)

長すぎるプロンプトは、超えた分が使われません。用語を並べるなら、出てくる順に短くまとめます。会議の文字起こしを要約する方法は、関連記事「議事録を生成AIで作るプロンプト集|文字起こし要約と決定事項・ToDo抽出」で扱っています。

字幕ファイル(SRT)で出力する

SRT は「番号・時刻・文・空行」をくり返す字幕の形式です。 時刻は 時:分:秒,ミリ秒 で、ミリ秒の前はカンマです(VTT はピリオド)。

faster-whisper で SRT を書く

faster-whisper には字幕を書き出す関数が無いので、自分で書きます。

def srt_time(sec: float) -> str:
    ms = round(sec * 1000)
    h, ms = divmod(ms, 3_600_000)
    m, ms = divmod(ms, 60_000)
    s, ms = divmod(ms, 1000)
    return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"


def write_srt(segments, path: str) -> None:
    with open(path, "w", encoding="utf-8") as f:
        for i, seg in enumerate(segments, start=1):
            f.write(f"{i}\n{srt_time(seg.start)} --> {srt_time(seg.end)}\n{seg.text.strip()}\n\n")


segments, info = model.transcribe("meeting.mp3", language="ja", beam_size=5, vad_filter=True)
write_srt(segments, "meeting.srt")

時刻を決めた区間(Segment)を3つ渡して書き出した結果です。1時間を超える時刻も、時の桁で表せていました。

1
00:00:00,000 --> 00:00:02,640
本日の議題は3つです。

2
00:00:02,930 --> 00:00:04,750
まず予算から確認します。

3
01:01:01,500 --> 01:01:03,999
以上です。

同じ区間を openai-whisper の WriteSRT に渡すと、1文字も違わない出力になりました。VTT(WriteVTT)では WEBVTT の行で始まり、1時間未満は 00:02.930 のように時を省いた形でした。

単語ごとの時刻

segments, _ = model.transcribe("meeting.mp3", language="ja", word_timestamps=True)
for seg in segments:
    for w in seg.words:
        print(f"{w.start:6.2f} {w.end:6.2f} {w.word}")

字幕を短く区切りたいときは、単語の時刻で行を分けます。openai-whisper のコマンドでは、--word_timestamps True と --max_line_width を組み合わせます。

長い録音の扱い

Whisper は音声を30秒ずつ区切って処理します。 1時間の録音もそのまま渡せますが、無音・雑音での幻聴、同じ文のくり返し、メモリと時間に気をつけます。

VAD で無音を飛ばす

faster-whisper の vad_filter=True は、同梱の Silero VAD(assets/silero_vad_v6.onnx)で声のある区間だけを文字起こしします。11秒の英語の音声・8秒の無音・同じ音声をつないだ30秒の音声で、区間を検出した結果です。

設定 検出した区間 かかった時間
既定(min_silence_duration_ms=2000) 0.0〜10.9秒、19.12〜30.0秒の2区間 0.135秒
min_silence_duration_ms=500 8区間(文の切れ目でも分かれた) 0.074秒

203秒の講義の音声では、既定で10区間・声のある部分は176.8秒、500ミリ秒にすると57区間・169.1秒でした。どちらも1秒かからずに終わりました。

VadOptions の項目 既定値 意味
threshold 0.5 これ以上の確からしさを声とみなす
min_silence_duration_ms 2000 この長さ以上の無音で区間を切る
speech_pad_ms 400 区間の前後に足す余白
min_speech_duration_ms 0 これより短い声は捨てる
max_speech_duration_s 無限 1区間の最大の長さ

README には「既定は控えめで、2秒を超える無音だけを除く」とあります。会議のように話者が交代する録音では、500〜1000ミリ秒に下げると区間が文に近くなります。

まとめて速く:BatchedInferencePipeline

from faster_whisper import WhisperModel, BatchedInferencePipeline

model = WhisperModel("turbo", device="cuda", compute_type="float16")
batched = BatchedInferencePipeline(model=model)
segments, info = batched.transcribe("long_meeting.mp3", language="ja", batch_size=16)

VAD で分けた区間を複数まとめて処理します。1.2.1 のソースでは、batch_size の既定は 8、vad_filter の既定は True、without_timestamps の既定は True でした。README の測定では、large-v2 を GPU で動かしたとき 1分03秒が 17秒(batch_size=8)になっています。そのかわりメモリを多く使います(4525MB → 6090MB)。

ファイルを分けて処理する

メモリが足りないとき、途中で止まっても続きから進めたいとき、OpenAI の API の 25MB の上限に合わせるときは、ffmpeg で分けます。

# 16kHz・モノラルの WAV で 60秒ずつに分ける
ffmpeg -i meeting.mp3 -ar 16000 -ac 1 -c:a pcm_s16le -f segment -segment_time 60 part_%03d.wav

# API 向けに小さくする(16kHz・モノラル・32kbps の mp3)
ffmpeg -i meeting.mp3 -ar 16000 -ac 1 -b:a 32k meeting_small.mp3

203秒の音声は、60秒・60秒・60秒・23秒の4ファイルになりました(最初の3つはどれも 60.032秒)。16kHz・モノラル・32kbps の mp3 では 203秒が 813,681バイトで、この割合なら 25MB に約109分入る計算です。

分けたファイルの時刻は0秒から始まるので、SRT にするときは前のファイルまでの長さを足します。

import subprocess
from pathlib import Path

def duration(path: str) -> float:
    out = subprocess.run(
        ["ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", path],
        capture_output=True, text=True, check=True,
    )
    return float(out.stdout)

all_segments, offset = [], 0.0
for part in sorted(Path(".").glob("part_*.wav")):
    segs, _ = model.transcribe(str(part), language="ja", beam_size=5, vad_filter=True)
    for s in segs:
        all_segments.append((s.start + offset, s.end + offset, s.text))
    offset += duration(str(part))

ファイルの区切りが文の途中に当たると、その前後の精度が落ちます(OpenAI のドキュメントにも同じ注意があります)。VAD の区間の境目で分けるか、数秒重ねて分けると和らぎます。subprocess の使い方は関連記事「Python subprocessの使い方|run・Popenの違いと例外処理の実例」で扱っています。

速さの比較(faster-whisper の README)

faster-whisper の README は、13分の音声で各実装を比べています。 測ったのは faster-whisper 1.1.0 と openai/whisper v20240930 です。

small モデル・CPU(Intel Core i7-12700K・8スレッド)

実装 精度 時間 RAM
openai/whisper fp32 6分58秒 2335MB
whisper.cpp fp32 2分05秒 1049MB
faster-whisper fp32 2分37秒 2257MB
faster-whisper int8 1分42秒 1477MB
faster-whisper(batch_size=8) int8 51秒 3608MB

large-v2 モデル・GPU(RTX 3070 Ti 8GB・CUDA 12.4)

実装 精度 時間 VRAM
openai/whisper fp16 2分23秒 4708MB
whisper.cpp(Flash Attention) fp16 1分05秒 4127MB
faster-whisper fp16 1分03秒 4525MB
faster-whisper int8 59秒 2926MB
faster-whisper(batch_size=8) int8 16秒 4500MB

どちらも beam size は 5 です。CPU では int8 にすると速く、メモリも減ります。 自分の環境で比べるときは、次のように測ります(実行時間の測り方は関連記事「Python処理時間の計測方法|perf_counter・timeit比較とコピペ集」で扱っています)。

import time
from faster_whisper import WhisperModel

for ct in ["int8", "float32"]:
    model = WhisperModel("small", device="cpu", compute_type=ct)
    t = time.perf_counter()
    segments, info = model.transcribe("sample.wav", language="ja", beam_size=5)
    text = "".join(s.text for s in segments)        # 回し切るまで測る
    elapsed = time.perf_counter() - t
    print(ct, f"{elapsed:.1f}s", f"RTF={elapsed / info.duration:.2f}")  # 1未満なら実時間より速い

segments を回し切る前に時計を止めると、ほぼ0秒と出てしまいます。

モデルの置き場所とオフライン

項目 openai-whisper faster-whisper
保存先 ~/.cache/whisper(download_root で変更) Hugging Face のキャッシュ(download_root で変更)
取得元 OpenAI の配布 URL Hugging Face
ネットに出ない 先に取得した .pt のパスを渡す local_files_only=True かフォルダのパスを渡す

Hugging Face に接続できない環境で、キャッシュに無いモデルを local_files_only=True で読もうとすると、次のエラーになりました。

LocalEntryNotFoundError: Cannot find an appropriate cached snapshot folder for the specified revision on the local disk and outgoing traffic has been disabled. To enable repo look-ups and downloads online, pass 'local_files_only=False' as input.

社内のネットワークの中で使うときは、外に出られる PC でモデルのフォルダを取得し、WhisperModel("/models/faster-whisper-small") のようにパスを渡します。

OpenAI の音声 API との使い分け

サーバーを持たずに済ませたいなら、OpenAI の音声 API(/v1/audio/transcriptions)があります。 音声は OpenAI に送られます。

モデル ドキュメントの位置づけ 推定コスト
gpt-transcribe 元の言語での文字起こしに推奨。prompt・keywords・languages に対応 $0.0045/分
gpt-4o-transcribe 既存の連携で使える。prompt とストリーミングに対応 $0.006/分
gpt-4o-mini-transcribe 同上 $0.003/分
gpt-4o-transcribe-diarize 話者のラベル(誰が話したか)が要るとき 料金ページに記載なし
whisper-1 単語・区間のタイムスタンプ、英語への翻訳 料金ページに記載なし
from openai import OpenAI

client = OpenAI()
with open("meeting_small.mp3", "rb") as f:
    tr = client.audio.transcriptions.create(
        model="gpt-transcribe",
        file=f,
        language="ja",
        prompt="社内の定例会議。議題は採用、広報、予算。",
    )
print(tr.text)

# 字幕(SRT)が欲しいとき
with open("meeting_small.mp3", "rb") as f:
    srt = client.audio.transcriptions.create(model="whisper-1", file=f, response_format="srt")
項目 ドキュメント・SDK の型の記載
ファイルの上限 25MB。mp3・mp4・mpeg・mpga・m4a・wav・webm
response_format json・text・srt・verbose_json・vtt・diarized_json。gpt-4o-transcribe・gpt-4o-mini-transcribe は json のみ
単語の時刻 timestamp_granularities は whisper-1 のみ(verbose_json が必要)
whisper-1 の prompt 224 トークンまで。綴りの見本向きで、指示には従いにくい
長い音声 25MB 以下に分ける。文の途中で切らないよう注意
区切り方 chunking_strategy="auto" でサーバー側の VAD が区切る(diarize では必須)
判断の軸 ローカル(faster-whisper) OpenAI の音声 API
音声を社外に出せない 向く 社内の規程の確認が要る
GPU が無い・すぐ始めたい CPU でも動くが遅い 向く
大量の録音を毎日処理 台数を増やせば単価が下がる 分単位の課金
字幕の細かい時刻 word_timestamps=True whisper-1 の verbose_json
話者を分けたい 別の仕組み(話者分離)を組み合わせる gpt-4o-transcribe-diarize

OpenAI の SDK の基本は、関連記事「OpenAI API Python入門|Responses APIのコピペ集」で扱っています。社外に出してよい情報の決め方は、関連記事「生成AI利用ガイドラインのテンプレート|入力してはいけない情報の一覧つき」で扱っています。

よくある質問

Q. 同じ文が何度もくり返されます。 A. 無音や雑音の区間で起きやすい現象です。vad_filter=True で無音を飛ばし、condition_on_previous_text=False で前の出力を引き継がないようにします。openai-whisper では word_timestamps=True と hallucination_silence_threshold(秒)で、長い無音のあとの怪しい区間を飛ばせます。

Q. 句読点が付きません。 A. initial_prompt は前の文脈として読まれるので、句読点のある日本語の見本の文を入れる方法があります。効き方は音声とモデルで変わるため、足りないときは文字起こしのあとに LLM で整えます。

Q. openai-whisper と faster-whisper で結果が違います。 A. 既定の beam_size(Python の openai-whisper は貪欲法、faster-whisper は 5)と VAD の有無が違います。そろえてから比べます。

Q. 仮想環境に分けて入れたい。 A. PyTorch など大きなライブラリが入るので、プロジェクトごとに分けると管理しやすくなります。関連記事「Python venvの使い方|仮想環境の作成・有効化・削除をOS別にコピペ」で扱っています。

Q. 話者を分けられますか。 A. Whisper 自体には話者を分ける機能はありません。ローカルでは話者分離のライブラリと組み合わせ、API なら gpt-4o-transcribe-diarize を使います。

まとめ

  • 手元で動かすなら faster-whisper(pip install faster-whisper、ffmpeg 不要)。CPU は compute_type="int8"
  • モデルは small〜medium(CPU)、large-v3・turbo(GPU) が目安。turbo は翻訳に使わない
  • 日本語は language="ja"・beam_size=5・vad_filter=True・initial_prompt(見本の文、最大223トークン)
  • openai-whisper の Python は beam_size の既定が None。コマンド(5)と結果が違う
  • SRT は 時:分:秒,ミリ秒。faster-whisper は自分で書く(openai-whisper の WriteSRT と同じ出力にできる)
  • 長い録音は VAD・BatchedInferencePipeline・ffmpeg での分割と時刻の足し算
  • サーバーを持たないなら OpenAI の音声 API(25MB まで、gpt-transcribe は $0.0045/分)

参考・出典

確認日はいずれも 2026年10月13日です。

  • GitHub「openai/whisper」:https://github.com/openai/whisper
  • GitHub「SYSTRAN/faster-whisper」:https://github.com/SYSTRAN/faster-whisper
  • PyPI「faster-whisper」:https://pypi.org/project/faster-whisper/
  • PyPI「openai-whisper」:https://pypi.org/project/openai-whisper/
  • OpenAI API ドキュメント「Speech to text」:https://developers.openai.com/api/docs/guides/speech-to-text
  • OpenAI API ドキュメント「Pricing」:https://developers.openai.com/api/docs/pricing
  • GitHub「openai/openai-python」:https://github.com/openai/openai-python

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Whisper文字起こし|Pythonコードとfaster-whisperの速さ比較」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?