OpenAI APIキー取得支援ツール(ソースコードと実行結果)


Python開発環境,ライブラリ類
ここでは、最低限の事前準備について説明する。機械学習や深層学習を行う場合は、NVIDIA CUDA、Visual Studio、Cursorなどを追加でインストールすると便利である。これらについては別ページ https://www.kkaneko.jp/cc/dev/aiassist.htmlで詳しく解説しているので、必要に応じて参照してください。
Python 3.12 のインストール
インストール済みの場合は実行不要。
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。
REM Python をシステム領域にインストール
winget install --scope machine --id Python.Python.3.12 -e --silent
REM Python のパス設定
set "PYTHON_PATH=C:\Program Files\Python312"
set "PYTHON_SCRIPTS_PATH=C:\Program Files\Python312\Scripts"
echo "%PATH%" | find /i "%PYTHON_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_PATH%" /M >nul
echo "%PATH%" | find /i "%PYTHON_SCRIPTS_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_SCRIPTS_PATH%" /M >nul
【関連する外部ページ】
Python の公式ページ: https://www.python.org/
AI エディタ Windsurf のインストール
Pythonプログラムの編集・実行には、AI エディタの利用を推奨する。ここでは,Windsurfのインストールを説明する。
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行して、Windsurfをシステム全体にインストールする。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
winget install --scope machine Codeium.Windsurf -e --silent
【関連する外部ページ】
Windsurf の公式ページ: https://windsurf.com/
OpenAI APIキー取得支援ツール
このプログラムは、OpenAI APIキーの取得と管理の支援ツールである。ユーザーがOpenAI APIを利用するために必要なAPIキーを取得・保存できる。なお,OpenAI APIキーには,各自,OpenAI アカウントが必要である.
ソースコード
"""
OpenAI APIキー取得支援ツール
特徴技術名: webbrowserモジュール
出典: Python Software Foundation. (2025). webbrowser — Convenient web-browser controller. Python 3.13.5 documentation. https://docs.python.org/3/library/webbrowser.html
特徴機能: プラットフォーム独立のブラウザ制御
webbrowserモジュールは、Unix、Windows、macOS、iOSなど様々なプラットフォームで動作し、各プラットフォームのデフォルトブラウザを自動的に検出して使用する機能を提供する。
学習済みモデル: 使用していない
方式設計:
- 関連利用技術:
- getpassモジュール: パスワード入力時のエコー無効化によるセキュアな入力機能
- pathlibモジュール: オブジェクト指向ファイルパス操作とファイル読み書き機能
- 入力と出力:
入力: ユーザーによる選択操作(ブラウザでのAPIキー取得、コンソールでのAPIキー入力)
出力: ブラウザでのOpenAI APIキーページ表示、APIキーの.envファイル保存
- 処理手順:
1. 既存APIキーの確認と選択肢提示
2. ブラウザでOpenAI APIキーページを開く
3. ユーザーによる手動でのAPIキー取得
4. getpassを使用したセキュアなAPIキー入力
5. APIキーの.envファイルへの保存
- 前処理: 既存.envファイルの読み込みとAPIキー存在確認
- 後処理: APIキー保存後の確認メッセージ表示
- 追加処理: APIキーの部分マスク表示によるセキュリティ配慮
- 調整を必要とする設定値:
- filename: APIキーを保存するファイル名(デフォルト: .env)
将来方策: 既存の.envファイルを読み込み、同一APIキーの存在確認を行う機能を実装済み
その他の重要事項: getpassモジュールによりAPIキー入力時の画面表示を防止
前準備: なし(標準ライブラリのみ使用)
"""
import webbrowser
from pathlib import Path
import getpass
# 設定定数
DEFAULT_ENV_FILE = '.env'
OPENAI_API_URL = 'https://platform.openai.com/api-keys'
API_KEY_PREFIX = 'OPENAI_API_KEY='
def check_api_key(filename=DEFAULT_ENV_FILE):
'''既存のAPIキーを確認'''
file_path = Path(filename)
if not file_path.exists():
return None
try:
content = file_path.read_text()
lines = content.splitlines()
for line in lines:
line = line.strip()
if line.startswith(API_KEY_PREFIX):
api_key = line.split('=', 1)[1]
if api_key:
return api_key
return None
except Exception as e:
print(f'ファイル読み込みエラー: {e}')
return None
def open_api_page():
'''OpenAIのAPIキーページを開く'''
print('ブラウザでOpenAIのAPIキーページを開きます...')
webbrowser.open(OPENAI_API_URL)
def show_instructions():
'''手動操作の指示を表示'''
print('\n=== 手動操作の手順 ===')
print('1. ブラウザでOpenAIにログインしてください')
print("2. 'Create new secret key'ボタンをクリック")
print('3. キーの名前を入力(任意)')
print("4. 'Create secret key'をクリック")
print('5. 表示されたAPIキーをコピーしてください')
print(' ※ このキーは一度しか表示されません!')
print('=====================================\n')
def get_api_key():
'''ユーザーからAPIキーを取得'''
print('コピーしたAPIキーを貼り付けてください')
api_key = getpass.getpass('APIキー: ')
return api_key.strip()
def save_api_key(api_key, filename=DEFAULT_ENV_FILE):
'''APIキーをファイルに保存(上書きモード)'''
try:
file_path = Path(filename)
# 既存ファイルがある場合は、OPENAI_API_KEY行以外を保持
existing_lines = []
if file_path.exists():
content = file_path.read_text()
existing_lines = [line + '\n' for line in content.splitlines()
if not line.strip().startswith(API_KEY_PREFIX)]
# 新しいAPIキーを追加
content = ''.join(existing_lines)
if content and not content.endswith('\n'):
content += '\n'
content += f'{API_KEY_PREFIX}{api_key}\n'
file_path.write_text(content)
print(f'APIキーを {filename} に保存しました')
return True
except Exception as e:
print(f'保存エラー: {e}')
return False
def main():
print('=== OpenAI APIキー取得支援ツール ===\n')
# 既存のAPIキーを確認
existing_key = check_api_key()
if existing_key:
print(f'既存のAPIキーが見つかりました: {existing_key[:8]}...{existing_key[-4:]}')
print('1. 既存のAPIキーを使用する')
print('2. 新しいAPIキーで上書きする')
choice = input('選択 (1/2): ').strip()
if choice == '1':
print('既存のAPIキーを使用します')
print('\n処理を終了します')
return
elif choice != '2':
print('無効な選択です')
print('\n処理を終了します')
return
# ブラウザを開く
input('Enterキーを押すとブラウザが開きます...')
open_api_page()
# 手順を表示
show_instructions()
# APIキー取得の確認
input('APIキーをコピーしたらEnterキーを押してください...')
# APIキーを取得
api_key = get_api_key()
if api_key:
print(f'\n取得したAPIキー: {api_key[:8]}...{api_key[-4:]}')
# ファイルに保存
save_choice = input('\nファイルに保存しますか? (y/n): ')
if save_choice.lower() == 'y':
filename = input(f'保存先ファイル名 (デフォルト: {DEFAULT_ENV_FILE}): ').strip()
if not filename:
filename = DEFAULT_ENV_FILE
save_api_key(api_key, filename)
else:
print('APIキーが入力されませんでした')
print('\n処理を終了します')
main()