パイソンエンジニア部https://python-engineer.co.jpWed, 04 Jun 2025 00:58:15 +0000jahourly1https://python-engineer.co.jp/wp-content/uploads/2024/06/cropped-パイソンエンジニア部-32x32.pngパイソンエンジニア部https://python-engineer.co.jp3232 AI統合開発環境 Cursor とはなにかhttps://python-engineer.co.jp/what-cursor/Wed, 04 Jun 2025 00:58:14 +0000https://python-engineer.co.jp/?p=982

Cursor (カーソル) とはプログラミングするためのアプリケーション = 統合開発環境 (IDE = Integrated Development Environment) です。 Cursor 以外のよく使われる ... ]]>

Cursor (カーソル) とはプログラミングするためのアプリケーション = 統合開発環境 (IDE = Integrated Development Environment) です。

Cursor 以外のよく使われる IDE には以下のようなものがあります。

名前読み方特徴開発元価格
VS Codeブイエスコード/ビジュアルスタジオコード拡張機能で環境を構築していくMicrosoft無料
PyCharmパイチャームPython に特化JetBrains無料/有料 (高機能版)
XcodeエックスコードiOS/macOS アプリ開発に必須Apple無料 (Mac 専用)

Cursor は VS コードを元に作られています。今まで VS Code を使っていた方であれば、見た目はほとんど一緒なので、違和感なく使い始められます。

従来の IDE との違いは AI を使って開発する前提で作られていることです。より具体的には、AI に対して指示を与えやすかったり、AI が開発中のプロジェクト全体を見渡して必要な箇所を推論してくれる、というような機能が深く統合されています。

そもそもなぜ IDE が必要なのか?

そもそもなぜ IDE が必要なのかというと、その方がプログラミングしやすいためです。プログラム自体はただのテキストファイルであり、メモ帳などを使っても開発していくことはできます。ですが、IDE にはメモ帳にはない機能が豊富に含まれています。

例えば、機能ごとに文字を色分けしたり、タイポ (キーの打ち間違い) や文法上の誤りがあったときに警告が表示されたり、変数や関数の文字を途中まで入力すると単語の続きを提案してくれたりします。

CleanShot20250604065034@2x.png

従来の IDE でもこのような機能はありましたが、AI が統合された Cursor ではより効率的にプログラミングすることができるようになっています。

例えば、開発中のプロジェクトに関する質問をすると、プロジェクト特有の文脈に基づいて回答してくれたり、ログイン機能を AI エージェントに依頼すると、ログイン画面から認証機能までを一気に実装してくれたりします。

Cursor の料金体系

このような AI 機能を使うためには、まず Cursor のアカウントを作成し、料金プランを選択する必要があります。

Pricing | Cursor – The AI Code Editor

CleanShot20250604070306@2x.png

無料から始められ、プロ機能を 2 週間お試しできますので、まずは無料から始めると良いでしょう。

  1. Cursor のダウンロードとインストール
    まずは公式サイトから Cursor をダウンロードし、インストールします。
  2. 初期設定
    インストール後、初期設定を行います。画面の指示に従って進めます。
  3. ブラウザでサインイン画面を開く
    初期設定が完了すると自動的にサインイン画面が開きます。ここでアカウントを作成するか、既存のアカウントでログインします。
  4. Cursor アプリケーション内でログイン
    最後に Cursor アプリケーション内で「Log in」を選択すればログインを完了です。

Cursor 以外の AI 統合開発環境の選択肢

Cursor のように AI が統合された IDE や拡張機能で AI を使ってプログラミングできるもの他にも色々とあります。

名前種類
Github Copilot拡張機能 (VS Code 系)
Cline拡張機能 (VS Code 系)
WindsurfCursor のように VS Code から派生した AI 統合開発環境
Windsurf Plugin拡張機能 (他の IDE でも Windsurf の機能を使えるようにしたもの)
JetBrains AI AssistantJetBrains 系拡張機能

他にもまだまだ色々ありますが、先鞭を付けたのが Cursor であり利用者、情報量が多いのが Cursor です。

私自身は Github Copilot に課金したり、 JetBrains 系 IDE である PyCharm の有償版を使っていたり、Windsurf にも課金したりして、複数の環境を使い分けたり比べたりして開発しています。一番初心者がつまずきにくいのは Cursor だと思いますのでおすすめします。

本音を言えば AI 統合機能以外の PyCharm の機能と使い心地にとても満足しておりこれをメインにしたいのですが、AI 統合機能では Cursor に軍配が上がります。そのため開発効率を重視して現在は Cursor を中心に据えています。

]]>
Cursorの主要機能まとめ (2025年5月版)https://python-engineer.co.jp/cursor-function/Wed, 28 May 2025 05:10:41 +0000https://python-engineer.co.jp/?p=969

Cursor には従来の IDE(統合開発環境) にはない AI を使った機能がふんだんに盛り込まれています。大まかに以下の 4 つです。 「WEB アプリが爆速で出来た」といった声を SNS で聞くことも多い AI エ ... ]]>

Cursor には従来の IDE(統合開発環境) にはない AI を使った機能がふんだんに盛り込まれています。大まかに以下の 4 つです。

  • チャット (Agent モード)
  • チャット (Ask モード)
  • Tab キー
  • Inline Edit (⌘K) / Ctrl+K

「WEB アプリが爆速で出来た」といった声を SNS で聞くことも多い AI エージェントによるプログラミングですが、使い込んでいると見えてくる、理想と現実のギャップもあります。そんな事例も紹介しつつ、各機能で何ができるのか? を把握して最先端プログラミングへの一歩を踏み出しましょう。

チャット (Agent モード)

エージェント (代理) 機能は AI がプログラマーの指示に従って一連のタスクを自動で実行してくれます。エージェントモードを使うと、例えば「ログイン機能を実装してテストも通して」といった要求に対し、ファイル/フォルダの作成、コードの編集からコマンドの実行までを AI が自動で行います

CleanShot20250528055958@2x.png

エージェントモード

エージェントモードでは、AI が与えられた高レベルの指示を完了するまで自動で作業を進めます。複数のファイルにまたがる変更やコンパイル・実行なども一括して行い、開発者は結果を評価し、受け入れるかどうか判断します。

後述するように、コマンドを実行する、などの各段階で開発者が確認できるようになっていたり、コード変更前に自動でバックアップを取ったりと、安全に配慮されています。

AI が生成したコードを受け入れるかどうか、編集箇所ごとに決められます。

CleanShot20250528060252@2x.png

ファイルごとに一気に受け入れる or 拒否したり、

CleanShot20250528061105@2x.png

あるいは、複数ファイルにまたがる変更を一気に受け入れる or 拒否する事も出来ます。

CleanShot20250528061159@2x.png

反対に、一度受け入れた提案でも指示を出した段階にさかのぼり、元に戻せるようになっています。

CleanShot20250528060804@2x.png

プログラミングにおける意味

エージェントモードは、開発者の「こうしてほしい」という要望を理解し、コード編集やビルド、テスト実行など必要な作業を AI がほとんど代行する機能です。まるで人間のアシスタントに「このバグを直しておいて」と頼むように、AI が具体的な手順を自律的に考え実行してくれます。

ただし、曖昧な指示よりも具体例な指示の方が精度が高いのは言うまでもありません。私はプログラマ不要論に少し懐疑的です。具体例な指示を出すにはそれなりに技術を理解していないと出せませんから。

AI エージェントの登場により、例えばログイン機能を自力で実装しきる必要はなくなるかもしれませんが、非エンジニアとコミュニケーションを取り、文章化されていない要件まで含めてプロジェクトを咀嚼し、技術全体を俯瞰してどの技術をどう組み合わせるか、どのように AI に指示を出すか、といったより抽象的・高度な能力が求められるようになっていくのではないでしょうか。

曖昧な例
「ログイン機能を実装してください」

# views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
def login_view(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return redirect('home') return render(request, 'login.html')

問題点

  • CSRF トークンの扱いが明示されていない
  • フォームのエラーメッセージ表示や入力バリデーションが無い
  • URL 設定やテンプレート側の実装が不足

具体的な指示
「Django の AuthenticationForm を使い、CSRF 対策とフォームのバリデーションを含むログインビューを実装し、成功または失敗時はメッセージを表示してください」

# views.py
from django.shortcuts import render, redirect
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login
from django.contrib import messages
def login_view(request): if request.method == 'POST': form = AuthenticationForm(request, data=request.POST) if form.is_valid(): user = form.get_user() login(request, user) messages.success(request, 'ログインに成功しました。') return redirect('home') else: messages.error(request, 'ユーザー名またはパスワードが正しくありません。') else: form = AuthenticationForm(request) return render(request, 'login.html', {'form': form})

このような簡単な単一のスクリプトを作るくらいなら AI だけに任せても出来てしまうことも増えてきました。しかし、商業で必要になるプログラミングの成果物は、多数のモジュールに渡って機能が連携した膨大なファイルから成り立っているのが普通です。現在の AI はまだそこまで包括的にプロジェクトの面倒を見られません。

実体験として、我々のようなエンジニアがどこかで介入しないと一見上手く行くように見えますが、どこかにバグが潜んでいます。私は AI によってエンジニアが不要になる、という見方はまだまだ先の話ではないかと思います。AI という革新的なツールをいかにに使いこなすか? がこれから求められるようになります。Cursor などの AI 統合開発環境はその筆頭格でしょう。

従来のプログラミングとの違い

従来はプログラマー自らが「コードの修正→保存→ビルド→テスト→エラー対応…」という一連の手順を何度も繰り返していました。エージェントモードでは、この手順を AI がまとめて行うため、人間は指示を出して結果を評価するだけで済みます。これにより開発速度が大幅に向上します。また、途中経過も逐一表示されるので、自動化されていても何が起きているか把握できる点も安心です。

与えた指示が終わったら通知音を鳴らすように設定しておけば AI に仕事を任せている間、ずっと画面を見守る必要はありません。この時間を使って別の仕事をしたり、メールチェックしたり、Youtube を楽しんだりできます。

CleanShot20250525115005@2x.png

具体例

例えば「ログイン機能を実装して、その部分のユニットテストも作成してください」とエージェントに依頼すると、AI はまずログイン機能のコードを書き、次に必要ならデータベース設定や関連ファイルも編集します。ユニットテストとは、コード、プログラムが期待した動きになるかどうか、確認するためのプログラムです。(先述のように具体的な指示の方が精度が高いのですが、簡略化のためあまり曖昧な指示になっています。これ以降の事例も同様です)

# app/auth.py
from flask import Flask, request, jsonify
from werkzeug.security import check_password_hash
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login(): data = request.json # 仮ユーザー情報 user = {'username': 'alice', 'password_hash': 'pbkdf2:sha256:...'} if data['username'] == user['username'] \ and check_password_hash(user['password_hash'], data['password']): return jsonify({'status': 'success'}), 200 return jsonify({'status': 'failure'}), 401

その後、自動でテストコードを生成し、プロジェクトのテストコマンドを実行します。仮にテストでエラーが出れば、原因を分析してコードを修正し、再度テストを実行…という流れを人手を介さず繰り返し、最終的にテストが通るところまで完了してくれます。ただし処理するべきコードの量が多いと処理漏れが発生することがありますので、よく注意して評価しなければなりません。まあ、人間に頼んだ時も同じことが言えるのですが。

import pytest
from app.auth import app
@pytest.fixture
def client(): return app.test_client()
def test_login_success(client): response = client.post('/login', json={ 'username': 'alice', 'password': 'correct_password' }) assert response.status_code == 200 assert response.json['status'] == 'success'
def test_login_failure(client): response = client.post('/login', json={ 'username': 'alice', 'password': 'wrong_password' }) assert response.status_code == 401 assert response.json['status'] == 'failure'

コンテキスト (文脈) の自動取得

エージェントが作業を行う際に必要となる周辺情報を自動で集めてくれる機能です。エディタ内でのカーソルの位置、プロジェクト内の関連するコードや設定ファイル、エラーメッセージ、コードの変更履歴などを AI が自律的に検索し、今のタスクに役立つ情報をモデルに提供します。開発者が逐一「このファイルも見て」と指示しなくても、AI が賢くコードベース (プログラムの全体) を理解してくれます。

プログラミングにおける意味

プログラミングにおいて「コンテキスト」とは、ある処理や問題に関連する周辺情報(コードや設定、利用しているライブラリの情報など)のことです。コンテキストの自動取得機能により、AI は今取り組んでいる課題に必要な他のファイルの内容や定義を自動で読み込みます。つまり、人間の開発者が「あのクラスの実装はどうなっていたかな?」と調べる代わりに、AI が自分で必要な部分を把握してくれるイメージです。

従来のプログラミングとの違い

ChatGPT や Gemini の Web アプリでも AI によるコード生成はできますが、カーソルと違って、逐一コンテキストを渡す必要があります。Cursor では、自律的に文脈を理解します。人間が指示する場合も、エディターと統合されているので、指示出しが簡単です。

CleanShot20250528064315@2x.png

Cursor ではコンテキスト取得が自動化されているため、その手間が省けます。AI がコードベース全体を見渡し「これが関係しそうだ」と判断した部分を推測して参照するので、人間が文脈を補足しなくても適切な回答やコード生成が得られる点が従来と大きく異なります。しかし、人間が明示的に指示してやった方が精度が高くなります

明示的に指示を出すには @ Add context を押して対象を選択します。

CleanShot20250528100913@2x.png

あるいはテキスト入力エリアに @ を入力します。 @ の前に文字が入力されていると機能しないのでその場合は半角スペースを入れてから @ を入力します。

CleanShot20250528073729@2x.png

具体例

例えば現在編集中のコードでエラーが発生したとします。その原因が別ファイルの関数にある場合、Cursor のエージェントはその別ファイルを読み込み、問題の関数の実装を確認します。そしてエラーの原因を突き止めた上でコードを自動修正します。開発者は自分でプロジェクト全体を検索することなく、AI が自律的に調査・修正してくれます。

コマンドの実行

Cursor のエージェントが必要に応じてターミナルコマンド(シェルコマンド)を自動生成・実行してくれる機能です。ターミナルとはいわゆる「黒い画面」で、文字だけでコンピュータに指令を出すことです。映画でもハッカーがそんなことをしているシーンがしばしば登場します。

CleanShot20250526064226@2x.png

ターミナルコマンドの例として「プロジェクトをビルドして」と AI に頼むと、AI は npm run buildmake など適切なコマンドを自動で端末に入力し実行します。デフォルトでは実行前に確認を求める仕組みになっており、ユーザーの許可無しに勝手にコマンドが走らないよう安全面も考慮されています。

なぜ事前に確認を求めるというと、コマンドの中にはファイルやフォルダを削除したり、データベースの構造を変えたりするような後戻りできないものがあるためです。

プログラミングにおける意味

開発ではコードを書くだけでなく、ビルドやテスト、ライブラリのインストールなど様々なコマンド操作が伴います。コマンド実行機能により、AI がプログラマの代わりにこれらの操作も自動化します。例えば AI がコードを書いた後、「このコードをテストするために pytest を実行しよう」と自分で判断し実行提案でしてくれるのです。

CleanShot20250528102100@2x.png

コマンド実行は初期設定では自動実行せず、ユーザーが実行ボタンをクリックして初めて実行されます。自動実行させたい場合は、設定画面から行います。

従来のプログラミングとの違い

通常、コードを書いた後にビルドやテストを行う際は開発者自身がターミナルを開いてコマンドを入力します。またコマンドのオプションや正確な名前を覚えていなければなりません。一言一句正確でないとエラーが発生します。私も以前はよくググって (もう死語ですかね) いました。今ではその必要はほとんどありません。

なぜなら Cursor では AI が望ましいコマンドを推測し、自動で実行提案まで行います。従来手動で行っていた環境構築やビルド・実行の作業をスムーズに代行してくれる点が大きな違いです。先述のように破壊的変更の危険があるため、実行前に確認ダイアログが表示される仕様になっています。

具体例

例えば、新しくパッケージを追加するコードを書いた場合、通常は自分で「npm install 新しいパッケージ名」とコマンドを実行するでしょう。Cursor のエージェントを使えば、コードに新しい依存関係を書き加えた際に AI がそれを検知し、自動で「依存関係をインストールしますか?」と提案してくれます。承認すれば AI が端末で npm install を実行し、続けて「ではアプリをビルドしましょうか?」と npm run build を提案してくれる、といった具合に対話的に進行します。

エラーの繰り返し修正

Cursor が Lint エラー (コードの文法ミスやスタイル違反のこと) や実行時エラーなどを検知すると自動的にコードを修正し、再度実行することを繰り返す機能です。

プログラムがエラー無く動作するまで AI が何度でも修正を試みてくれるため、開発者の手作業によるデバッグ回数を減らすことができます。

プログラミングにおける意味

コードを書いて実行した際にエラーが出るのは日常茶飯事ですが、この機能により AI がエラー内容を解析し、原因を取り除く修正を提案・適用してくれるようになります。Lint エラーについても、自動で修正してくれるため、コーディング標準に沿った綺麗なコードを保ちやすくなります。

従来のプログラミングとの違い

従来はエラーが発生する度にエラーメッセージを読み、該当箇所のコードを人間が修正して再実行するという繰り返しが必要でした。Cursor ではそのループを AI が行います。エラーメッセージを受け取った AI が即座にコードのどこが悪いかを特定し、修正するため、人間は提案を確認して受け入れるだけで済みます。開発者自身がデバッグサイクルを何度も回す必要がない点が革新的です。デバッグとはバグの発生箇所を調査し、バグを取り除くことです。

以前はエラーが出るとググっていくつものサイトを巡回し、自分のケースに当てはまるものを探し出し、自力でエラーを解決するというのが当たり前でした。しかし、AI の登場によって、この一連の作業は劇的に楽になりました。

具体例

例えば、Python では、if 文の次の行はインデントしなければならないなどの決まりがあります。これを守っていないと Lint エラーになりますが、それを自動で認識し修正を行ってくれます。

また、プログラム実行時にエラーが発生するとターミナルにエラーメッセージが表示されますが、そのエラーをチャットにコンテキストとして渡すこともできます。エージェントはエラー解決のためのコードの修正やコマンドを実行します。再実行してエラーになったら、またデバッグを行い、エラーがなくなるまで繰り返す、というサイクルを行ってくれます。

CleanShot20250526112935@2x.png

しばしばこのデバッグサイクルが同じところをぐるぐると回ってしまい、いわゆる無限ループに陥ることがあります。ツールの呼び出しが 25 回までに制限されているため、修正箇所が多いとツール使用回数に達して途中でエージェントの動きが止まってしまいます。

ファイルを読む

  • コードベース内のファイルの内容を読みます。
  • 最大モードで最大 750 行
  • 他のモードでは最大 250 行

ディレクトリをリストする

  • ファイルの内容を読み取らずに、ディレクトリの構造を読み取る。

コードベース

  • インデックス付きコードベース内でセマンティック検索を実行します。

グレップ

  • ファイル内の正確なキーワードやパターンを検索します。

ファイルを検索する

  • 曖昧検索を使用して、名前でファイルをすばやく見つけます。

ウェブ

  • 検索クエリを生成し、Web 検索を実行します。

ルールを取得

  • ルールの種類と説明に基づいて特定のルールを取得します。
  • ルールとは Cursor 全体あるいはプロジェクト に対する指示です

これを執筆している段階では、まだまだ AI エージェントに全てを任せることはできません。人間がハンドルを握って、修正箇所を小さなものに限定するように指示したり、具体的な修正内容を指示するといった配慮が必要な場面は少なくありません。

画像を使用

チャットに画像をドラッグ&ドロップしたり、入力欄下の画像アイコンをクリックして画像ファイルを添付することで、AI に視覚情報を与えられる機能です。Cursor は画像内の文字を読み取ったり(OCR)、内容を解析してテキスト化し、AI への追加コンテキストとして利用します。後述の Ask モードでも使用できます。

プログラミングにおける意味

プログラミング中に直接関係する画像情報(例:スクリーンショットに写ったエラーメッセージや設計図)を AI に共有し、視覚的なデータも含めて支援を受けられるます。AI に、画像から得た情報まで加味させることで、言葉では説明しにくい、あるいは面倒な場合でも、回答やサポートが期待できます。

従来のプログラミングとの違い

従来はエラー画面のスクリーンショットを見ながら自分で文字起こししたり、UI デザインの画像を見比べながら手動で実装していました。Cursor では画像を直接 AI に渡せるため、画像中の情報を AI が理解しコーディング支援してくれます。

具体例

完成イメージの UI (ユーザーインターフェース) 画像を渡し「このデザインを HTML/CSS で実装して」と指示すれば、画像を解析して大まかなレイアウトを推測し、「まずヘッダー部分に○○、CSS で△△…」と実装してくれます。

余談ですが、デザインを実装する場合、より確実に期待する UI を実装するには MCP を使って Figma などと連携するとよいです。

ドキュメントを活用

外部ライブラリやフレームワークの公式ドキュメントを AI が参照できるようにする機能です。Cursor には主要なサードパーティ製ライブラリのドキュメントがあらかじめクロール・インデックス化されており、チャットで @docs と入力した後にライブラリ名を入力するだけでそのライブラリのドキュメント情報を AI に参照させることができます。

もし未登録のドキュメントが必要な場合でも、@Docs → “Add new doc” という操作で任意のドキュメントを追加し、AI に学習させることも可能です。これらの後述の Ask モードでも使用できます。

CleanShot20250528114056@2x.png

プログラミングにおける意味

これはAI に公式リファレンスを直接参照させることで、正確で信頼性の高い回答やコード補助を得るという意味があります。プログラミングでは公式ドキュメントの内容が重要ですが、人間が都度読みに行くのは大変です。

Cursor では AI が必要箇所をドキュメントから拾ってきてくれるため、常に最新かつ正確な情報に基づいたサポートを受けられます。が、過度な期待は禁物です。結局、自分でドキュメントを読んで実装した方が正確に実装できることも少なくありません。

従来のプログラミングとの違い

従来、コードを書いていて分からないことがあれば公式ドキュメントサイトを開いて検索する必要がありました。また、一般的な AI チャットは訓練データに古い情報しか無かったり不正確な知識を返すこともあります。Cursor のドキュメント活用機能では、AI が公式情報源をその場で参照するため回答の信頼性が上がります。開発者はエディタを離れずに必要なドキュメント知識を得られるという点でとても便利です。

具体例

実装済みの Python モジュール (ファイル) に対して @docs に続いて langchain でドキュメントを指定し、リファクタリングを依頼するという使い方ができます。

CleanShot20250528114857@2x.png

チャット (Ask モード)

Cursor の Ask モードはエディタ内で AI と対話しながらコードの相談や質問ができる機能で、常に現在開いているファイルやカーソル位置の情報を把握した上で回答や提案を行ってくれます。

エージェントとの違いは、エージェントはコードの編集やコマンドの実行を自動で行うのに対して、チャットでは編集や実行は行わずに質問に回答するという違いがあります。

CleanShot20250528104039@2x.png

画面を切り替えることなく、その場で「このコードにバグはないかな?」「どういう方針で実装したらいいかな?」などと質問すれば、AI がコンテキストを理解した上で答えてくれます。また、必要に応じて特定のコード部分やプロジェクト全体をコンテキストとして会話に含めることも可能です。プログラミング初心者や未経験者にとって非常に頼りになる教師のような存在です。

ブラウザで実行する ChatGPT のような WEB アプリとの違いは、ブラウザにプロジェクトのファイル群をアップロードする必要がないという点です。これはかなり楽です。

コンテキストを理解させる必要がない単純な質問の場合、Web 版の ChatGTP などに聞くのも一つの手です。なぜなら、Cursor は使用回数に制限があるためです。無料プランであれば月 50 回の低速リクエスト、プロプランの場合は月 500 回の高速リクエストという制限があります。

チャット

エディタ右側のチャットペインでは、人間が質問や指示を入力し、AI がそれに回答する形で対話が進みます。AI はバックエンドで高度な言語モデルを利用しており、エディタと連携して現在のコード内容を参照できます。これにより「この関数は何をしていますか?」のようなコードに踏み込んだ質問にも、AI が実際のコードを読み解いた上で答えてくれます。

プログラミングにおける意味

プログラミング中に疑問が生じたとき、チャット機能はまるでそばにいる先輩エンジニアに質問するような役割を果たします。AI がコードの文脈を理解して回答してくれるため、ドキュメントをいちいち検索したり、エラー内容をネットで調べたりする手間をその場で解消できます。チャットは常に現在のファイルや選択中のコードを把握しているので、「この部分、バグってないかな?」と聞けば AI が実際にコードを検証して助言してくれるわけです。

従来のプログラミングとの違い

従来、コードに関する質問をするには自分で調べるか、同僚に聞くか、あるいは汎用の ChatGPT などにコード断片を貼り付けて相談する必要がありました。Cursor のチャットではエディタと AI が統合されているため、画面を切り替えずシームレスに質問と回答が可能です。さらにコード内容を AI が直接参照できるため、誤解の少ない的確な回答が得やすいです。これは AI アシスタントや Web 検索にはなかった強みです。

具体例

例えばコードを書いていてエラーの原因が分からないとき、エラーメッセージの内容や該当コードをコピーしてウェブ検索する代わりに、Cursor のチャットに「このエラーは何が原因ですか?」と尋ねます。すると AI はエラーメッセージとコードを照らし合わせ、「◯◯の型が一致していないことが原因です。この変数を String 型に変換してから渡す必要があります」といった具体的なアドバイスを即座に返してくれます。また、新機能の実装方針に迷ったとき「ユーザー認証機能はどう組めばいい?」とチャットで相談すれば、コード例付きで実現方法を教えてくれるでしょう。

インスタント適用

インスタント適用は、チャット内で AI が提案したコードをワンクリックで実際のコードベースに反映できる機能です。AI から回答としてコードブロックが提示された際に、そのコードブロックの上部に表示される Apply ボタン(▶)をクリックするだけで、提案されたコードが該当ファイルに自動挿入・置換されます。

CleanShot20250528111142@2x.png

プログラミングにおける意味

AI との対話で得られたコード提案を手作業で自分のファイルにコピペする必要がなく、回答をすぐ自分のプロジェクトに取り込めるという意味で手間が省けて快適です。提案内容を確認して問題なければ即座に適用できるため、AI を活用した開発フローがスムーズになります。

従来のプログラミングとの違い

従来、たとえば ChatGPT など外部の AI から得たコード例を使うには、自分でエディタに切り替えてコピー&ペーストし、必要に応じて書式を整えるといった手間が発生していました。Cursor ではチャットとエディタが統合されており、ワンクリックで回答内容を反映できるのでそのような手間がありません。コピペミスも防げます。

具体例

例えばチャットで「この JSON 文字列をパースしてオブジェクトに変換するコードを書いて」と依頼した場合、AI が提案として何行かのコードを返してくれるでしょう。そのコードブロック上に表示される ▶ ボタンをクリックすると、Cursor は自動的に現在開いているファイル(または該当すべきファイル)にそのコードを書き込みます。結果、提案された関数を自分で写すことなくすぐに使い始めることができます。また、既存コードの修正提案であれば、対応する箇所が自動で書き換わります。

ウェブに問い合わせ

チャット内で @Web コマンドを使うことで AI にインターネット検索をさせ、最新の情報を取得できる機能です。プログラミングの疑問点によっては手元のコードだけでなく最新の技術情報や一般的な知識が必要なことがありますが、この機能により Cursor は Web 上から適切な資料を見つけて回答に反映します。エージェントモードの場合は必要に応じて自動的に Web を検索することもありますし、明示的に @web を使うことも出来ます。

プログラミングにおける意味

最新ライブラリやフレームワークの利用方法を調べたり、API 仕様やエラー解決策の最新情報を取得できます。AI が知らない直近の出来事についても調べられるため、常に最新の技術トレンドに対応できます。

従来のプログラミングとの違い

通常、開発中に最新情報を知りたい場合は自分でブラウザを開いて検索しなければなりませんでした。Cursor ではチャット内で「@Web React 最新のフックの使い方」などと入力するだけで、AI が自動でウェブ検索し結果を要約してくれる点が大きく異なります。これは従来のコードエディタには無い、仕組みです。また AI 単体では持っていない知識でも、この方法で補えるため回答の正確性・網羅性も向上します。

CleanShot20250528113743@2x.png

具体例

例えば「このエラーコードの意味は?」と聞いて AI が知らない場合でも、「@Web」で検索させれば該当エラーに関する最新の StackOverflow 回答や公式ドキュメントを見つけ出し、「エラーコード 1234 は○○を意味し、設定ファイルの△△を変更する必要があると記載があります」と答えてくれることがあります。また、新しいライブラリの使い方が分からないとき「@Web ライブラリ XYZ 使い方」と入力すれば、AI が Web 上のチュートリアル記事等を調べ、「公式サイトによると XYZ の使い方は…」と要点を教えてくれるのです。

Tab キー

Tab キーは Cursor のオートコンプリート(自動補完)機能の名前です。提案を受け入れる場合は Tab キーを押すことからこんな名前なのでしょう。キーボードの Tab キーのことをいっているのか、Cursor の Tab キーのことをいっているのか区別しにくくなってしまい紛らわしいのですが。Tab キーを押して提案を受け入れるだけで、面倒なコードを書く手間が大幅に省けます。

マルチライン編集

Cursor のオートコンプリートは従来の IDE 補完よりも強力で、現在の文脈から次に書くべきコードを複数行まとめて予測・提案してくれます。

CleanShot20250528115450@2x.png

開発途中の文脈や直前の編集内容も考慮して提案を更新してくれます。ときどき「俺の脳内スキャンしてる?」という感覚になるほど賢いです。反面そこを変えたらだめだろ、というような提案もあります。依存しすぎは事故の元です。もし余計な提案が現れたら Esc キーを押してキャンセルできます。

プログラミングにおける意味

オートコンプリートは本来、プログラミング中に変数名や関数名の入力を補助する機能ですが、Cursor の場合は AI が現在のコードやコメントを理解し、次に必要な処理そのものを予測して提示してくれる点が特徴です。つまり、自分が書こうとしていたロジックを AI が先読みして書いてくれるので、まさにペアプログラミングで相棒が続きを書いてくれるような役割を果たします。

従来のプログラミングとの違い

従来の簡易なコード補完機能では、例えば関数名の途中まで入力すると残りを補完するといった単純な提案が主でした。また IDE によっては一行程度のスニペット提案はありますが、Cursor のように複数行にわたり現在の文脈に合わせた高度な予測を行う補完はありませんでした。従来は開発者自身が考えてコードを書き進める必要があった部分を、Cursor では AI が先回りして提案してくれるため、コーディングの効率と快適さが格段に異なります。

具体例

例えば「ユーザーのリストを名前順にソートする」という関数を書こうとコメントを書いたとします。Cursor はコメント内容から意図を汲み取り、次の瞬間にはその関数の中身(ソートアルゴリズムやループ処理など)を数行にわたって提案してくれます。

# ユーザーのリストを名前順にソートする関数

AI が続きを書いてくれます。

# ユーザーのリストを名前順にソートする関数
def sort_users_by_name(users: list[dict]) -> list[dict]: """ users: {'name': str, 'age': int} の辞書のリスト 戻り値: 名前順にソートされたリスト """ return sorted(users, key=lambda u: u['name'])

こんなことができるのは LLM が「続きを書くことが得意」という性質があるためです。

開発者は Tab キーを押すだけでその提案を受け入れ、一瞬で関数の骨組みが完成します。また、変数名を入力し始めると、それに合致する既存の変数や型に応じた初期値まで含めたコードを続けて提示してくれることもあります。

下記のカーソル予測と連携して機能することも多々あり、とても便利です。

カーソル予測

Cursor が次にユーザーが編集したい箇所を予測し、自動でカーソルを適切な位置に移動させる機能です。これにより、コーディング中のカーソル移動がスムーズになります。カーソルを移動した先で先述のマルチライン編集が表示されることもあります。

カーソル予測による補完が現れなくても、編集したい箇所にカーソルを持っていくとコードを提案してくれることもあります。

なかなか賢いです。

プログラミングにおける意味

コードを書く際、開発者は頻繁にキーボードやマウスでカーソル位置を移動させます。カーソル予測機能は AI がおおよそ「次に編集したいであろう場所」を推測し、カーソルを移動させてくれるます。

従来のプログラミングとの違い

一般的なエディタでは、カーソルの移動は全てユーザーの操作(矢印キーやマウスクリック)に委ねられていました。Cursor のカーソル予測は、従来存在しなかったレベルでの入力支援です。しばしばお節介ですが、わりと適切に次の入力箇所へ導いてくれます。これは従来にない UX(ユーザー体験)で、些細な機能に思えますが長時間のコーディングでは効率に差が出ます。

具体例

例えば、関数を定義し終えた後、本来であれば自分でカーソルを移動して関数を呼び出すコードを書き始める必要がありますが、Cursor のカーソル予測機能が自動で適切な位置に移動してくれます。

従来

# ユーザーが入力した直後の状態(カーソルは関数定義内に残っている)
def greet_user(name): print(f"Hello, {name}") # カーソルがここに残っているとすると…
# ここで自分でカーソルを移動して次の処理を入力する必要がある

カーソル予測

# Cursor のカーソル予測が作動し、
# カーソルを自動で関数定義の外、次にコードを書き始めやすい位置に移動
def greet_user(name): print(f"Hello, {name}")
# ← カーソルがこの行頭に移動し、以下のような提案も表示
greet_user("Alice")

スマートリライト

スマートリライトは、開発者が途中まで入力した不完全なコードや、文法的に誤ったコードを AI が賢く解釈し正しい形に書き換えてくれる機能です。多少雑な入力でも、Cursor が意図を汲んで最適なコードにリライト(書き直し)してくれるため、コーディング初心者でも安心してコードを書くことができます。

プログラミングにおける意味

スマートリライトの意味するところは、AI がプログラマの書こうとしている内容を予測し、正しい構文やより良いコードに自動修正してくれることです。人間にとっての「書きかけのメモ」を、AI がきちんと清書してくれるようなイメージです。これにより、細かなシンタックスミスやうっかりミスを深く気にせずコーディングを続けられます。

従来のプログラミングとの違い

従来のコーディングでは、コードの一部を間違えると警告表示され、その都度自分で修正する必要がありました。高度な IDE でも簡単なタイポ (キーの打ち間違い) を直す程度の補助はありますが、Cursor のように意図を読み取ってコード全体をより良く書き換えてくれる機能はありませんでした。スマートリライトのおかげで、従来はエラー原因を調べて修正に費やしていた時間を削減できます。

具体例

例えば、プログラミング初心者が Python でリストをループするコードを書こうとして、コロンを忘れたり変数名を間違えたりしたとき、その場でコードをより正確な形に整えてくれるのです。

# 誤り: コロンが抜けている・変数名が間違っている
item_list = [0, 1, 2, 3, 4, 5]
for i in range(len(item_lst)) print(item_lst[i])

Cursor 提案後:

# 修正後: コロンを追加し、変数名を正しい item_list に統一
item_list = [0, 1, 2, 3, 4, 5]
for i in range(len(item_list)): print(item_list[i])

コロンの追加
元の for 文には末尾のコロン : が欠けていましたが、AI が検知して自動で補完。

変数名の統一
item_lst のスペルミスを見つけ、正しい item_list に置き換えています。

このように、Cursor のスマートリライトは構文エラーや単純なタイポをまとめて訂正し、即座に動作するコードに整えてくれます。また、余計な半角スペースを削除する提案をしたり、コーディング規約に則った提案もしてくれます。

⌘K / Ctrl+K

⌘K(Mac)、およびCtrl + K(Windows) は、エディタ内でショートカットによって呼び出せる AI コード補助機能です。⌘K は Cursor 独自のホットキーで、これを押すことで AI によるコードの生成や編集、ターミナルコマンド生成といった操作をコード編集中に即座に利用できます。Chat 機能が対話形式のサポートであるのに対し、⌘K 機能はより直接的にエディタやターミナルで AI 補助を得られます。

これは、エディタ内およびターミナルで利用できます。

インライン ⌘K

エディタ上で⌘K(Ctrl+K)を押すことで起動する、コードの生成・編集機能です。何も選択せずに⌘K を押すと、新しいコードを生成するプロンプトが表示され、そこで「○○な関数を作成して」と指示すると AI がコードを書き出します。一方、コードを選択した状態で⌘K を押すと「Edit」モードとなり、「このコードを△△のように変更して」と自然言語で伝えるだけで AI が選択部分を編集してくれます。カーソルの位置によって編集範囲を自動的に拡張してくれます。

CleanShot20250528121416@2x.png

右下の v をクリックすると、選択範囲に対する指示なのか (Edit Selection)、ファイル全体に対する指示なのか (Edit Full FIle) 選べます。
CleanShot20250528121544@2x.png

また、Quick Question はその場で回答を得られます。
CleanShot20250528121828@2x.png

Sent do Chat ではチャットペインにコードを送れます。

コマンドライン ⌘k /Ctrl+k

コマンドライン (ターミナル) でも使えます。ターミナルを選択して⌘K を押します。そのまま実行できるようにはなっていません。回答をコピペしてタミナルに貼り付けて実行します。
CleanShot20250528134732@2x.png

プログラミングにおける意味

⌘K によるコード生成・編集は、開発者が望むコード変更を直接文章で指示し、即座にその結果を得られることを意味します。新規コードの自動生成から既存コードのリファクタリングまで、煩雑な操作なしに実行できます。隣に有能なペアプログラマーがいて「ここはこう書き換えておきましたよ」と助けてくれるような感覚です。

従来のプログラミングとの違い

従来、コードを書き換えるには開発者自らが該当箇所を編集し、文法ミスがないか確認し、影響範囲も考慮して…というステップが必要でした。また、新しいコードを一から書くときも、手作業でタイピングしロジックを構築する必要があります。⌘K 機能では開発者の意図を一文で伝えるだけで AI が即座にコードを書き・書き換えてくれるため、このプロセスが大幅に短縮されます。例えば関数名の一括変更やアルゴリズムの差し替えもワンアクションで完了し、従来の何倍も迅速にコードベースを改良できます。

具体例

既存のコードで変数名 x があまり意味を持たないので、よりわかりやすい名前にしたいとします。その場合、該当コードを選択して⌘K を押し、「変数 x を適切な名前にリネームしてください」と入力します。すると AI がコード中の xuserCount に置き換え、必要なら関連する部分も整合性を保つよう編集してくれます。また、新しく日付をフォーマットする関数が欲しい時は、何も選択せず⌘K を押して「今日の日付を YYYY-MM-DD 形式の文字列で返す関数を実装して」と指示します。即座に AI がその関数のコードを生成し、エディタ上に挿入してくれます。

]]>
Python パッケージ管理ツール「uv」とは? – 爆速のライブラリ管理を初心者向けに解説https://python-engineer.co.jp/uv-env/Mon, 21 Apr 2025 07:57:20 +0000https://python-engineer.co.jp/?p=897

Python で開発を始めるとき、パッケージ管理や仮想環境という言葉を耳にすることが多くなります。特に最近注目されているのが、Rust 製の超高速パッケージ管理ツール「uv」です。この記事では、Python 初心者の方向 ... ]]>

Python で開発を始めるとき、パッケージ管理仮想環境という言葉を耳にすることが多くなります。特に最近注目されているのが、Rust 製の超高速パッケージ管理ツール「uv」です。この記事では、Python 初心者の方向けに「uv」とは何か、なぜ便利なのかをわかりやすく解説します。

uv の魅力

そもそもなぜ uv を使って仮想環境を管理するのが良いか、結論から先に述べておきます。

  • 従来のパッケージ管理システムであるpipと比べて圧倒的に早い
  • プロジェクト用のディレクトリを作って仮想環境を作成する、などの定型作業を簡略化できる

例えば yfinance ライブラリのインストールでは uv は約3秒、従来の pip は約 10秒と3倍以上の差が出ます。

↓ uv add を使った場合

↓ pip install を使った場合

普段pipを使ってパッケージ管理しているという方も、この機会にぜひuvを使った仮想環境管理を始めてみてください。

そもそも仮想環境って何? – プロジェクトごとの“部屋”を作ろう

uv の話に入る前に、初心者の方がつまずきやすい「仮想環境」について簡単に説明します。

Python の大きな魅力の一つに、サードパーティーライブラリが充実している、というものがあります。サードパーティーライブラリとは、Python インストール時に一緒にインストールされるライブラリとは別の、第三者が開発し公開しているライブラリのことです。例えば、requestspandasなどはサードパーティーライブラリの代表的な例です。

このサードパーティーライブラリを使う場合は、その都度インストールして使いますが、仮想環境を使わないでインストールすると問題が起きてしまいます。そのため、仮想環境を使ってサードパーティーライブラリをインストールするのが基本的な Python の作法です。

仮想環境とは、一言で言えば「プロジェクトごとに分離された専用の Python 環境」のことです。通常、Python で仮想環境を使わずにライブラリをインストールすると、システム全体(またはユーザー全体)で共有されます。しかしこの場合、別々のプロジェクト間でライブラリのバージョンがぶつかったり、不必要なものまで混ざってしまったりしてトラブルの元になります。

なぜなら、プロジェクト A ではrequestsのバージョン 1.0 にしなければならないが、プロジェクト B ではrequestsのバージョン 2.0 でなければならない、ということがあります。ところがシステム全体にインストールしたrequestsがバージョン 1.0 だとプロジェクト B では要件を満たさなくなり、エラーが出てしまいます。

いってみれば、複数のエンジニアが、1台のパソコンを取り合っているような状況です。

このような場合に仮想環境を使うと、プロジェクト A 用、プロジェクト B 用…といった具合にそれぞれ独立したライブラリの置き場を作れるのです。

例えて言うなら、仮想環境はプロジェクト専用の部屋(またはサンドボックス) です。各部屋にはそのプロジェクトに必要な道具(ライブラリ)だけが置いてあり、他の部屋の道具とは混ざりません。

仮想環境を使うことで、「他のプロジェクトで動いていたコードが急に動かなくなった…」といった依存関係の混乱(いわゆる“依存関係地獄”)を避けることができます。Python 開発において仮想環境は今や必須の知識ですので、uv を使わない場合でも是非覚えておきましょう。

uv の基本的な使い方 – インストールからプロジェクト作成まで

では本題のuv の使い方を見ていきます。ここでは Windows および Mac で Python 3.13 を使っていることを想定します。uv 自体のインストール方法から、プロジェクトでライブラリを追加する手順まで、順を追って解説します。

uv のインストール方法

uv は以下の方法でインストールできます。初心者の方には手軽な方法として、まず公式の一行インストールスクリプトを使う方法をおすすめします。

Windows の場合

PowerShell を管理者権限で起動して次のコマンドを実行します。

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Mac の場合

ターミナルで次のコマンドを実行します(公式サイトが提供するスクリプトを実行する形です)。

curl -LsSf https://astral.sh/uv/install.sh | sh

brew を使う場合は以下のコマンドを実行します。

brew install uv

インストール成功の確認

インストール後にターミナルを再起動し、uv --versionuv helpを実行してみて、エラーが出なければ導入成功です。

uv -V
uv 0.6.14 (Homebrew 2025-04-09)

プロジェクトの初期化(uv init)と仮想環境の作成

uv をインストールできたら、早速プロジェクトで使ってみましょう。まず新しく Python プロジェクトを始める場合や、既存プロジェクトで uv 管理に切り替える場合は、プロジェクト用フォルダでuv initを実行します。

ここでは uv_testというディレクトリ(フォルダ)を作成し、作業を進めていきます。

mkdir uv_test
cd uv_test

続いて、uv initを実行することで、カレントディレクトリに以下のファイルが作成されます。

uv init

lsコマンドで確認してみてください。

Windows (PowerShell)

ls -Force

Mac

ls -la

作成されたファイル、フォルダ群

すると以下のファイルが作成されていることがわかります。先頭にドットが付いているものは隠しファイルや隠しディレクトリです。-Force-laは、隠しファイルも表示するようにするオプションです。

.git
.gitignore
.python-version
README.md
main.py
pyproject.toml
  • .git – Git リポジトリのディレクトリ(バージョン管理に用いる)。
  • .gitignore – Git で無視するファイルの設定。
  • .python-version – Python バージョン管理。
  • README.md – プロジェクトの説明文。
  • main.py – サンプルの Python コードで、プロジェクトが空の場合に雛形として用意されるものです。削除しても構いません。
  • pyproject.toml – プロジェクトの設定ファイル(後述)。

このように、uv initは複数のファイル・ディレクトリを一度に作成できます。冒頭で述べた「定型作業を簡略化」の一例です。

プロジェクト用ディレクトリまで一気に作成するコマンド

上述のように、プロジェクトフォルダ作成と init コマンドを別々に実行するのではなく、以下のようにすれば、プロジェクト用フォルダと上述のファイル・ディレクトリ群を同時に作成できます。

uv init <プロジェクト名>

uv initにより、仮想環境(.venv フォルダ)も自動で作成されるといわれていますが、本稿執筆時点の最新バージョン 0.6.14 では、仮想環境は手動で作成する必要があります。もっとも、後述するuv addを使えば、仮想環境も同時に作成できますので、以下のコマンドは実行する必要はありません。

uv venv <仮想環境名>

具体的には

uv venv .venv

とすると、次のような出力が表示されます(Mac の場合)。

Using CPython 3.13.2
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate

続けて、Activate with: の後に書かれているコマンド(source .venv/bin/activate または .venv\Scripts\activate)で仮想環境を起動しましょう。

パッケージ(ライブラリ)の追加: uv add と uv sync

仮想環境の準備ができたので、次にライブラリを入れてみましょう。従来ならpip install ライブラリ名でインストールしていたところですが、uv では専用コマンドuv addを使います。例えば、プロジェクトに WEB フレームワークdjangoを入れたい場合

uv add django

と実行します。すると、uv は以下のような処理を自動で行います。

  • 適切な Python インタプリターで仮想環境(.venv)を作成(仮想環境がない場合)。
  • PyPI 上からdjangoおよびその依存ライブラリを解決し、必要なパッケージ一覧を決定。
  • パッケージのダウンロード・インストールを実行。

実行結果として、「X 個のパッケージを何ミリ秒で解決」「Y 個のパッケージを準備・インストール」などと表示され、例えばdjangoに加えてasgirefsqlparseなどの関連ライブラリも含め数秒以内で完了します。

uv add django
Using CPython 3.13.2
Creating virtual environment at: .venv
Resolved 5 packages in 4ms
Prepared 3 packages in 1.12s
Installed 3 packages in 59ms + asgiref==3.8.1 + django==5.2 + sqlparse==0.5.3

このとき従来の pip installのようにあらかじめ仮想環境を作成し、仮想環境に入っておく必要はありません。「仮想環境に入り忘れたままpip installを実行してしまい、システム全体にインストールしてしまった!」という初心者あるあるを避けられます。もちろん、あらかじめ仮想環境を作成・仮想環境に入った状態でuv addを実行しても構いません。

ただ、仮想環境にインストールしたライブラリを使ったプログラムを実行するには、仮想環境に入った状態でプログラムを実行する必要があります。後述のuv runコマンドを用いれば一時的に仮想環境を起動してプログラムを実行できます。

が、仮想環境が有効になるのはその一回限りなのでやはり .venv\Scripts\activate (Windows) もしくは source .venv/bin/activate (Mac) で常に仮想環境に入った状態にしておくのがおすすめです。

(補足)uv は初めてuv addを実行したタイミングで自動的にpyproject.tomlファイルにそのライブラリを追加し、依存関係をまとめたuv.lockファイルも生成・更新します。これらについては後述します。

その他の基本コマンド (remove, sync, lock, run, tree)

uv には他にも便利なコマンドが用意されています。主なものをまとめると次の通りです。

  • uv remove <ライブラリ名> – プロジェクトからライブラリを削除します。依存関係から外し、仮想環境からもアンインストールされます。
  • uv sync – プロジェクトの依存関係設定(pyproject.toml や lock ファイル)と仮想環境の内容を同期します。レポジトリをクローンしてプロジェクトを構築する際などに使用します。
  • uv lock – 依存関係のロックファイル(uv.lock)を生成・更新します。通常uv add時に自動実行されますが、明示的にロックだけ更新したい場合に使います。
  • uv run <コマンド> – 仮想環境上で指定したコマンドを実行します。例えばuv run pytestとすれば、そのプロジェクトの環境で pytest(テスト)を実行できます。uv run pythonとすれば仮想環境の Python で対話モードを起動でき、プログラムもその環境で動かせます。
  • uv tree – プロジェクトの依存関係ツリーを表示します。どのパッケージがどのパッケージに依存しているかを階層表示するコマンドで、環境の把握に役立ちます。

まずは以上のコマンドを覚えておけば、ひと通り uv での開発を進められるでしょう。pip で行っていた操作は、基本的にuv <サブコマンド>で代替できるイメージです。次は、従来の pip コマンドとの具体的な違いに触れてみます。

uv を使うとライブラリのインストールが速い理由

Python の標準的なパッケージ管理コマンドであるpipは便利ですが、大量のライブラリをインストールするときや、依存関係が多いライブラリのインストールに時間がかかりがちです。なぜなら、pip1 つずつ順番にパッケージをダウンロード・インストールするため、ネットワークの待ち時間や入出力処理が積み重なって数分かかってしまうこともあります。

そこで、uv は内部処理を大幅に高速化しています。その仕組みをいくつか紹介しましょう。

並列処理(パラレル)による速度向上

uv は複数のパッケージを同時にダウンロード・処理できます。イメージとしては、pip が 1 本の水道から順番に水をくむのに対し、uv は複数の水道から同時に水をくむようなものです。一度に複数の作業が進むため、全体の時間が短縮されます。

キャッシュ(Cache)の活用

uv は過去にダウンロードしたパッケージを保存して再利用します。例えば一度ライブラリをインストールすると、そのライブラリのデータを倉庫にとっておくイメージです。次回同じものが必要になったとき、倉庫からすぐ取り出せるので、再ダウンロードする必要がなく速いのです。また、uv はインストール済みのファイルをコピーせずにリンクで共有する仕組み(ハードリンクやコピーオンライト)も使っており、無駄なディスクコピーを減らして速度アップと容量節約を実現しています。

必要なデータだけ取得

pip はパッケージの情報を得る際に、パッケージ丸ごと(例えばホイールファイル)をダウンロードすることがあります。しかし uv は、ホイールファイル内の必要なメタデータ部分だけを取得するなど、「ムダなダウンロードを省く」工夫をしています。これは、分厚い本から必要なページだけコピーするようなもので、結果的に通信量と時間を節約できます。

Rust による高効率な実装

uv は Python ではなくC言語のようなシステムに近い言語であるRustで書かれているため、処理自体のオーバーヘッドが少なく最適化されています。そのため依存関係の解決(どのバージョンのライブラリを入れるか決める作業)やインストール処理が軽快に実行されます。

以上のような理由から、uv は pip に比べて桁違いに高速な動作を実現しています。公式によればpip の 10 ~ 100 倍速いケースもあるとのことです。

従来の pip install と何が違うの?

uv を使うときに気になるのが、「従来のpip installと何が違うのか」という点ですよね。ここでは処理方式や使い勝手の違いをもう少し詳しく見てみましょう。

pip コマンドとの互換性と違い

uv は「pip のドロップインリプレース(置き換え)」を目指して作られており、pip の主要な機能はほぼそのまま使える互換モードを持っています。例えば、以下のような pip コマンド相当の操作が uv でも可能です。

uv pip install <パッケージ名>

pip installと同様、パッケージをインストール。ただし仮想環境が存在しないとエラーになります

uv pip install -r requirements.txt

pip install -rと同様、requirements.txt の内容をまとめてインストール

uv pip uninstall <パッケージ名>

pip uninstallと同様、パッケージをアンインストール

uv pip list

インストール済みパッケージの一覧表示(pip listと同様)

uv pip freeze

インストール済みパッケージをpip freeze形式で表示

互換性の違い

このように、基本的な pip 操作は uv 経由でも同じように実行可能です。そのため、既存のプロジェクトに uv を導入しても、慣れ親しんだ pip コマンド感覚で操作できます(実際は内部で uv の速い処理が動いています)。

では一方で、uv 独自の違いとして何があるでしょうか?主なポイントは次の通りです。

  • 圧倒的な速度: すでに述べた通り、uv は pip に比べて数倍~数十倍の速度で依存関係の解決とインストールを行います。Rust 製実装の恩恵で公式ベンチマークでは最大 100 倍速いとされます。
  • 一部の挙動の違い: uv は pip との互換性を重視しつつも、依存関係の解決アルゴリズムが独自実装のため、場合によって pip と異なるバージョンのパッケージを選択することがあります。例えば、あるライブラリがまだ正式版でなくプレリリース版(ベータ版など)しかない場合、pip はそれを入れてしまうことがありますが、uv は極力安定版(ステーブル)を選ぶポリシーを持っています。そのため、同じコマンドでも pip 経由と uv 経済由で入るバージョンが異なるケースがありえます。ただし大半の一般的なケースでは気にしなくてよい差異であり、uv 側でも将来の互換性改善が議論されています。
  • 環境の一元管理: pip はあくまで「パッケージインストールツール」で、仮想環境作成にはvenv、依存関係のロックにはpip-toolsPoetryなど他のツールが必要でした。uv は単体でプロジェクトの仮想環境作成からパッケージ管理、Python 本体の切替、ロックファイル管理まで対応しています。つまり uv 一つで、従来は pip + venv + pip-tools(または Poetry/Pipenv)+ pyenv…と複数併用していた機能をカバーできる統合ツールです。初心者にとっても、複数ツールを覚える必要が減るのはメリットでしょう。

総じて、uv は「中身はまったく新しいけれど、表向きは pip ライク」な存在と言えます。既存のワークフローになじませやすく、なおかつ性能が劇的に向上するため、試してみる価値は大いにあります。

uv 特有のファイル – pyproject.toml と uv.lock の意味

uv を使うと、プロジェクトフォルダ内に見慣れないファイルが生成されます。それがpyproject.tomluv.lockです。それぞれ役割がありますので押さえておきましょう。

  • pyproject.toml: これは Python のプロジェクトの設定を記述するためのファイルです。元々 PEP(Python Enhancement Proposal)で定められた従来の設定ファイルで、プロジェクト名やバージョン、依存ライブラリの一覧などを記載します。uv ではpyproject.toml内の[project]セクションにdependencies(依存関係)としてライブラリ名とバージョン指定が追記されていきます。例えば先ほどuv add pytestを実行した場合、pyproject.toml の中にdependencies = ["pytest"]のような行が追加されます(実際はバージョン指定も含まれます)。要するに、プロジェクトで必要なライブラリを宣言するファイルであり、Poetry など他のツールでも用いられる共通フォーマットです。
  • uv.lock: こちらはロックファイルと呼ばれるものです。簡単に言えば、「このプロジェクトで実際にインストールしたすべてのパッケージとそのバージョンを記録したスナップショット」のようなファイルです。uv ではuv adduv lock実行時に自動的にuv.lockが生成/更新され、そこに直接・間接すべての依存パッケージとその正確なバージョン、ハッシュ値などが書き込まれます。例えばpytestを追加した場合、pytest 本体のバージョンだけでなく、その依存であるpluggypackaging等のバージョンもすべて記録されます。

ロックファイルがあることで、チーム開発や将来の環境再現が容易になります。全員が同じバージョンの組み合わせで開発できるため、「ある人の環境では動くのに別の人の環境では動かない」という事態を防げます。また、一度決まった組み合わせを次回からそのまま使えるので、毎回依存解決をやり直す必要がなくインストールがさらに高速になります。

uv.lock は手動で編集する必要はなく、むしろ内容を人間が細かく把握する必要もありません(長大な一覧になります)。重要なのは、このファイルをGit などバージョン管理に含めて共有することです。こうすることで、別の開発者がリポジトリをクローンしてuv syncするだけで、全く同じ環境が復元されます。

requirements.txt との違い

Python で依存関係を記録・共有する方法としては、昔からrequirements.txtというファイルもよく使われてきました。これは単にライブラリ名==バージョンを羅列したテキストファイルで、pip install -r requirements.txtでそのリストのパッケージをインストールできるものです。uv.lock と requirements.txt は目的が似ていますが内容の詳細さに違いがあります。

  • uv.lock は上記のようにすべての依存関係(transitive dependencies も含む)と正確なバージョン、ハッシュ値等を記録した詳細なファイルです。環境を再現することに特化しており、開発時の再現性・安定性を担保します。
  • requirements.txt は基本的に直接依存のパッケージのみを列挙する場合が多く、シンプルですが詳細な依存ツリーまでは含みません。その分、pip やその他のツールでも幅広く扱える互換性の高い形式です。

uv を使って開発する際は原則 uv.lock を使えば十分ですが、例えばデプロイ環境で uv が使えない場合や、他のサービス(CI ツールなど)が requirements.txt しか受け付けない場合もあるでしょう。そんなときのために、uv にはuv export -o requirements.txtというコマンドが用意されており、現在の uv.lock の内容からピン留め(固定)されたバージョン一覧を requirements.txt 形式で出力できます。

このようにして作った requirements.txt を使えば、uv を直接使わない環境でも同じパッケージ群をインストールできます。ただし基本的には、開発・テストでは uv.lock を使い、必要に応じて出力した requirements.txt は配布や一時的な用途に留めるのがよいでしょう。

uv 利用上の注意点 – pip との併用に要注意!

最後に、uv を使う上での注意点や初心者がハマりがちなポイントをいくつか紹介します。便利な uv ですが、使い方を誤ると思わぬ混乱を招くこともありますので気をつけましょう。

pip コマンドを直接使わない(uv 経由で使う)

uv 導入後に最も陥りがちなのは、うっかり従来どおりにpip installコマンドを実行してしまうケースです。例えば仮想環境を有効にしていない状態でpip install XXXとしてしまうと、それはシステム全体にインストールされてしまい、uv 管理の環境には反映されません。逆に仮想環境が有効な状態で pip コマンドを直に使うと、ライブラリ自体は仮想環境に入りますがuv の lock ファイルや設定は更新されないため、実際の環境と uv.lock との内容がズレてしまう可能性があります。この「依存関係のズレ」が起きると、後でuv syncしたときに余計なパッケージが削除されたり、逆に存在しないはずのパッケージが残ってuv treeに表示されない等、混乱のもとになります。

要するに、uv を使い始めたら、パッケージの追加・削除には必ず uv 経由のコマンドを使う習慣をつけましょう。インストールならuv addまたはuv pip install、アンインストールならuv removeまたはuv pip uninstallといった具合です。pip の実行をすべて uv に仲介させることで、uv 側で状況を正しく把握でき、lock ファイルも正確に保たれます。

万一、「uv を付け忘れて pip コマンドを実行してしまった!」という場合の対処法も覚えておきましょう。一番確実なのは、仮想環境内からそのパッケージを削除して環境をクリーンに戻すことです。具体的には:

pip freeze > uninstall.txt # 仮想環境内の全パッケージ一覧を出力
pip uninstall -r uninstall.txt -y # その一覧に載っているパッケージを一括アンインストール

とする方法があります。この手順で仮想環境を一度まっさらにしてから、改めてuv syncを実行すれば、uv.lock に基づいて正しい状態に復元できます(いったん環境をリセットし、uv.lock→ 環境を同期し直すイメージです)。実際、pip には-rオプションで一覧に記載のパッケージをまとめて削除する機能があり、上記のようにpip freezeの結果を使うことで「インストールされているものを全部消す」ことが可能です。この操作は強力なので、他に影響が出ないか注意しつつ自己責任で行ってください。

uv コマンドと仮想環境の関係

uv はuv runコマンドを使うことで、仮想環境を自動で利用してコマンドを実行できます。例えば、前述のuv run pytestでは、仮想環境を有効化した状態で pytest を走らせてくれます。これは便利な反面、直接仮想環境をアクティベートして作業する場合との挙動の違いに注意しましょう。

通常、仮想環境を使う場合はsource .venv/bin/activate(Windows では.\.venv\Scripts\activate)を実行してから作業します。uv ではuv runを使えば activate しなくてもよいのですが、対話的に仮想環境に入って作業したい場合は従来通り activate しても構いません。activate してしまえば、あとの操作は普通の pipenv などと同じ感覚で、pythonコマンドやpip list等も仮想環境上で動きます。ただし先述の注意 ➀ の通り、activate 中でも新たなパッケージ追加はuv addで行うようにしてください(pip を直接使うと uv に情報が行かない点は同じです)。

また、uv が作る仮想環境の名前にも触れておきます。デフォルトでは.venvフォルダに仮想環境を構築しますが、uv venv <フォルダ名>コマンドで別名の環境を作ることもできます。しかしその場合、環境を activate しないとuv pip系コマンドがうまく動作しないという現象が知られています (Uv gotchas // Railslide // Code, experiments, and thoughts)(カレントディレクトリに.venvがないために uv が環境を見つけられない)。初心者のうちは特別な理由がない限りデフォルトの.venvを使うのがおすすめです。

まとめ

今回は、Python 初心者の方に向けてパッケージ管理ツール「uv」の概要と使い方、メリット・注意点を解説しました。最後に内容を簡単に振り返ってみましょう。

  • uv とは: Rust 製の高速 Python パッケージマネージャーで、pip や venv 等を統合したオールインワンツール。ライブラリのインストールや依存関係解決が非常に速く、環境構築のストレスを大幅に軽減してくれる。
  • 高速化の仕組み: 並列ダウンロード、キャッシュの活用、必要部分のみの取得などにより、pip のボトルネックを解消している。その結果、場合によっては pip の 10 倍以上の速度で処理が完了する。
  • 仮想環境と依存管理: uv は仮想環境を自動で作成・管理し、pyproject.toml で依存を宣言、uv.lock で確定したバージョンを保存する。これにより開発環境の再現性が担保され、チーム開発でも安心。
  • 基本コマンド: uv initでプロジェクト開始、uv add/uv removeでパッケージ追加削除、uv syncで環境同期、uv runで環境内実行など、直感的なコマンドが用意されている。
  • pip との違い: 操作感は似ているが、処理速度や依存解決アルゴリズムが洗練されている点で優れる。pip+α のツールをまとめて置き換え可能で、初心者にも扱いやすい設計。
  • 注意点: uv 使用時は pip コマンドを直接使わないようにし、常に uv 経由で操作する(そうしないと環境が不整合になる恐れ)。また他の環境管理ツールとの二重管理にならないように気をつける。

最初は新しいツールに戸惑うかもしれませんが、実際に使ってみると「とにかく速くて快適」というのが率直な感想になるでしょう。Python 初心者の方でも、uv を使えば仮想環境の作成から依存関係の管理、パッケージの追加までスムーズに行えます。何より、環境構築に余計な時間を取られずコーディングに集中できるのは大きなメリットです。

ぜひ一度、あなたの Python プロジェクトで uv を試してみてください。その高速さと便利さに驚くはずです。快適な Python ライフを応援しています!

]]>
コーディング支援AI Unblockedで快適にPythonプログラミングhttps://python-engineer.co.jp/unblocked/Fri, 25 Oct 2024 04:03:08 +0000https://python-engineer.co.jp/?p=887

AIの発展が著しい今日、コーディングにおいてAIとの協働は欠かせないないものになっています。どのAIもそれぞれ特徴があり、費用がかかるものもあるので選定に迷うところです。 私自身はChatGPTやClaudeといったもの ... ]]>

AIの発展が著しい今日、コーディングにおいてAIとの協働は欠かせないないものになっています。どのAIもそれぞれ特徴があり、費用がかかるものもあるので選定に迷うところです。

私自身はChatGPTやClaudeといったものから、コーディング特化を謳っているGithub CopilotやJetBrains AI Assistantを比較しながら使っています。

コーディング特化AIの多くは有料ですが、この記事では無料で使える優れたAIアプリを紹介します。

コーディング特化AI

コーディング特化であるGithub CopilotやJetBrains AI AssistantはIDEのプラグインとして提供されており、プロジェクト内のモジュールやコードを指定することで文脈に応じた回答を期待できいい感じです。

下図はモジュールを指定しているところです。JetBrains AIのものですがGithub Copilotも同じような感じでモジュールを指定します。モジュールを指定したうえでプロンプトを入力し回答してもらいます。

これはこれでいい感じなのですが、プロジェクトが大きくなり複数のモジュール間で連携が必要な場合モジュール指定が面倒です。というちょっとした不満を持っていましたが、さらにいい感じのAIを見つけましたので共有します。

Unblockedというアプリです。

Unblockedが何が嬉しいのか

このアプリ、何がいいかというとGithubを読み込んで回答してくれる点です。つまりAIがプロジェクト全体を理解したうえで回答してくれる、ということです。

まずはアカウントを作成してデータソースからGitHubと連携します。

さらに読み込ませるレポジトリを選択します。

あとはこんな感じでAIとやりとりします。

上の画像はブラウザでのやりとりですが、IDEのプラグインもあり、チャットは同期されます。

Github CopilotやJetBrain AIはどちらも有料ですが、なんとこのアプリは無料です。チームでの利用を前提としているアプリなので個人には無料で開放しているのでしょう。

前者のコーディング特化AIの2つと遜色ないどころかプロジェクト全体を理解しているためかより的確な回答を得られる印象です。

Githubにレポジトリがあり、プッシュしていないと最新情報を認識してくれませんが、かなり有用です。

Unblocked ぜひ使ってみてください。

]]>
Pythonの仮想環境(venv)とは?初心者のための完全ガイドhttps://python-engineer.co.jp/what-venv/Wed, 03 Jul 2024 02:05:58 +0000https://python-engineer.co.jp/?p=568

Pythonを学び始めると「仮想環境」という言葉を耳にして「仮想?」「環境?」どういうこと? となりませんか? この記事ではPythonの仮想環境(venv)について、解説していきます。 目次 venvとは何か? なぜ仮 ... ]]>

Pythonを学び始めると「仮想環境」という言葉を耳にして「仮想?」「環境?」どういうこと? となりませんか? この記事ではPythonの仮想環境(venv)について、解説していきます。

venvとは何か?

venvは「virtual environment(仮想環境)」の略称です。簡単に言えば、コンピュータの中に独立したPython環境を作ることです。

現実の例で喩えるとグローブボックスのようなものです。箱の中で行ったことを箱の外の環境に影響が及ばないようにするために用います。

なぜ仮想環境が必要なのか?

プログラミングを進めていくと、プロジェクトによって異なるバージョンのPythonやライブラリを使いたい場合が出てきます。しかし、仮想環境を使わない通常の環境では、1つのライブラリに対して1つのバージョンしかインストールできません

例えば:

  • プロジェクトAではライブラリXのバージョン2が必要
  • プロジェクトBではライブラリXのバージョン3が必要

このような状況で、仮想環境が役立ちます。仮想環境を使えば、プロジェクトごとに独立した環境を作り、それぞれに必要なバージョンのPythonやライブラリをインストールできます

「仮想」という名前が付いていますが後述するように、実体はディレクトリ(フォルダ)とそこに格納されたPythonインタープリタやその他のファイル群です。システムにインストールされたpython.exeとは別の場所に作られ、仮想環境外に影響が及ばないようになります。

「環境」とは「実行環境」のことで以下の要素でできています。これらをシステム全体とは別の場所に作ることでプロジェクト固有の実行環境として利用できるようになります。

要素解説
Pythonインタープリターシステム全体のPythonバージョンとは異なるバージョンを使用できる
サイトパッケージ仮想環境専用のサイトパッケージディレクトリが作成される。ここにインストールされたパッケージやライブラリは、この仮想環境内でのみ利用可能。
実行スクリプト仮想環境に出入りするためのスクリプト群

仮想環境の作り方

PyCharmなどの統合開発環境(IDE)を使用している場合、仮想環境が自動的に作成されることがあります。しかし、IDEを使わずにPythonを実行する機会も多いでしょう。そんな時は、以下の方法で仮想環境を作成できます。

基本的な作り方

コマンドプロンプトやターミナルで以下のコマンドを実行します:

python -m venv venv

※ Macの場合は python の代わりに python3 を使用してください。

実行するとシステムのデフォルトPythonバージョンが使われます。

python --version

Python 3.11.2がデフォルトであれば以下のように仮想環境が作成されます。python.exeを見ただけではわかりませんが、pip3.11.exeと表示されているので判別できますね。

特定のPythonバージョンで仮想環境を作る

特定のバージョンのPythonを使用したい場合は、以下のようにします。

Windows:

py -3.10 -m venv venv

Mac:

python3.10 -m venv venv

コマンドを実行すると以下のようにPythonのバージョンを指定して仮想環境を作成できます。

ただし、システムに対象バージョンのPythonがインストールされていなければなりません。

仮想環境の使い方

仮想環境に入る

仮想環境に入るには以下のコマンドを実行します。

Windows:

venv\Scripts\activate

Mac:

source venv/bin/activate

仮想環境に入るとターミナルの行頭に (venv) と表示されます。

ちなみにこのコマンドで実行しているactivateの実体はバッチやスクリプトファイルです。

仮想環境を終了する

仮想環境を終了するには、以下のコマンドを使用します(WindowsもMacも共通)。ターミナル行頭の(venv)の表示が消え仮想環境から出たことが分かります。

deactivate

初心者つまずきポイント

特に初心者のうちは忘れがちですが、ライブラリをインストールは仮想環境に入ってから行うようにしましょう。そうしないと先述したとおりシステム全体に対してライブラリをインストールすることになってしまいます。

間違えてシステム全体にインストールしてしまった場合はアンインストールするpipコマンドを実行してください。

pip uninstall <ライブラリ名>

途中で本当に削除していいか? の確認がありますのでyを入力して先に進みアンインストールします。

システムにインストールされているライブラリをまとめてアンインストールする

間違えてインストールしたライブラリが複数の依存関係があるものだと関連するライブラリも同時にインストールされます。Djangoであれば以下のようになります。

PS C:\Users\ikuma\Downloads> pip freeze
asgiref==3.8.1
Django==5.0.6
sqlparse==0.5.0
tzdata==2024.1

このようなとき、上記の方法で一つ一つアンインストールするのは面倒です。以下の要領でまとめて削除するとよいです。

1. インストールされている全ライブラリをテキストファイルに出力する

pip freeze コマンドの出力をテキストファイルに出力します。出力先のファイル名はなんでも構いません。

pip freeze > <ファイル名>

例えばpip freeze > hoge.txtのようにします。

2. pip uninstall の -r と-y オプションでまとめてアンインストール

アンインストールの対象を上記手順で出力したファイルに書き込まれているものするためのオプションが-rです。

-yはアンインストール確認をすべてyにするためのオプションです。

pip uninstall -r <ファイル名> -y

pip uninstall -r hoge.txt -yのようにします。これでスッキリ。システム全体から誤ってインストールしてしまったライブラリをまとめてアンインストールできます。

最近流行している仮想環境 uv について

最近は uv という仮想環境管理ツールがはやっています。pip install に比べて5~10倍ほど高速に動作します。詳しくは以下をご覧ください。

まとめ

Pythonの仮想環境(venv)は、プロジェクトごとに独立した開発環境を作るための強力なツールです。初心者の方々も、プロジェクトを進める中で仮想環境の使用に慣れていくことで、より効率的で管理しやすい開発が可能になります。

プログラミングの世界では、整理整頓が大切です。仮想環境を上手に活用して、クリーンで効率的なPython開発を楽しんでください!

]]>
DMM WEBCAMP (ウェブキャンプ) レビューhttps://python-engineer.co.jp/dmm-webcamp-review/Wed, 26 Jun 2024 12:21:20 +0000https://python-engineer.co.jp/?p=862

はじめに

こんにちは、皆さん!プログラミングに興味があるけど、どこから始めればいいのか迷っている方、もしくはキャリアチェンジを考えている方に朗報です。わたしも同じような悩みを抱えていた一人ですが、DMM WEBCAMPに通うことでその悩みを解消しました。今回は、わたしのDMM WEBCAMPでの体験を元に、その魅力やカリキュラム、サポート体制、メリット・デメリットについて詳しくお伝えします。

DMM WEBCAMPを選んだ理由

数あるプログラミングスクールの中で、なぜわたしがDMM WEBCAMPを選んだのか。その理由は、以下の3つです。

  1. 実践的なカリキュラム: 実際のプロジェクトを通じて学べるので、即戦力としてのスキルが身につく。
  2. 豊富なサポート体制: 経験豊富なメンターによる個別指導と、24時間対応のオンラインサポート。
  3. コストパフォーマンスの良さ: 他のスクールと比較しても手頃な価格で、分割払いも可能。

カリキュラムの内容

DMM WEBCAMPのカリキュラムは非常に実践的で、多岐にわたるスキルを学べます。代表的なカリキュラムの内容を以下に紹介します。

DMM WEBCAMP COMMIT

DMM WEBCAMP COMMITは、短期間でプロフェッショナルなスキルを身につけるための集中コースです。このコースでは、実際のプロジェクトを通じて学ぶことで、実践的なスキルを習得できます。

  • Webアプリケーション開発: HTMLとCSSでウェブページを作成し、JavaScriptでインタラクティブ(双方向)な動きを追加します。さらに、Ruby on Railsでサーバーサイドの処理を学び、Reactを使ってユーザーインターフェースを作成します。
  • チーム開発: 実際の開発現場を想定し、チームで協力してプロジェクトを進めるスキルを磨きます。

DMM WEBCAMP ビジネス教養コース

DMM WEBCAMP ビジネス教養コースは、ビジネススキルとしてプログラミングを学びたい方向けのコースです。

  • プログラミングの基礎: HTML、CSS、JavaScriptを学び、ウェブサイトの基礎を理解していきます。
  • ビジネスに役立つスキル: データ分析や自動化スクリプトの作成など、ビジネスシーンで役立つスキルを習得します。

DMM WEBCAMP エキスパートコース

DMM WEBCAMP エキスパートコースは、さらに高度な技術を学びたい方向けのコースです。

  • 高度なプログラミング技術: Python、AI、機械学習など、最先端の技術を学ぶことができます。
  • 実践プロジェクト: 企業と連携したプロジェクトを通じて、実際の現場で必要とされるスキルを習得します。

学習環境とサポート体制

DMM WEBCAMPの学習環境は非常に整っていて、以下のようなサポートを受けることができます。

  • メンター制度: 毎週一回のメンタリングセッションで、学習の進捗を確認し、疑問点を解消できます。メンターさんはとても親切で、実際に何度も助けられました。
  • オンラインサポート: 24時間対応のチャットサポートがあるので、いつでも質問できます。夜中に行き詰まったときでも、すぐに助けを求められるのは本当に心強かったです。
  • キャリアサポート: 就職活動に向けたアドバイスや、企業とのマッチングサービスを提供。履歴書の書き方から面接の対策まで、手厚くサポートしてくれました。

受講プロセス

DMM WEBCAMPの受講プロセスはシンプルで、以下のステップを経て進行していきます。

  1. カウンセリング: まず最初に、無料カウンセリングを受けます。ここで、自分の目的や目標に合わせた最適なコースを選ぶサポートを受けられます。
  2. 申し込み: カウンセリング後、自分に合ったコースを選んで申し込みを行います。支払い方法も一括払いと分割払いのどちらかを選べます。
  3. 学習開始: コース開始日から学習がスタートします。オンラインプラットフォームを活用して、いつでもどこでも学習を進めることができます。
  4. メンターサポート: 学習中は、定期的にメンターからのサポートを受けながら進めていきます。個別の指導があるので、わからない点があればすぐに解決できます。
  5. プロジェクト演習: 実際のプロジェクトを通じて、実践的なスキルを身につけます。これにより、学んだことを実際の現場でどのように活かすかを学ぶことができます。
  6. 就職サポート: コースを修了したら、キャリアサポートチームが就職活動をサポートしてくれます。企業とのマッチングや面接対策など、きめ細やかなサポートが受けられます。

学習環境の詳細

DMM WEBCAMPの学習環境について、もう少し詳しくお話ししましょう。まず、学習環境として提供されるオンラインプラットフォームは非常に使いやすく、自己学習の進捗を管理しやすい設計になっています。具体的には、以下のような機能があります。

  • ダッシュボード: 学習の進捗状況を一目で確認できるダッシュボードがあり、自分の学習ペースを把握しやすいです。
  • 教材ライブラリ: 豊富な教材がオンラインで提供されており、いつでもアクセス可能です。テキストやビデオ教材、実践課題など、多様な形式の教材が揃っています。
  • コミュニティフォーラム: 他の受講生と交流できるフォーラムがあり、情報交換やモチベーションの維持に役立ちます。ここで得られる仲間とのつながりは、学習の大きな助けとなります。

メンターサポートの詳細

メンターサポートについても詳しく説明します。DMM WEBCAMPでは、経験豊富なメンターが受講生一人一人に対して個別のサポートを提供しています。

  • 個別メンタリング: 週に一回、メンターとマンツーマンで学習の進捗や疑問点を確認するセッションがあります。ここで具体的なフィードバックやアドバイスをもらうことができます。
  • チャットサポート: 24時間対応のチャットサポートがあり、学習中に行き詰まった時にいつでも質問できます。これにより、学習をスムーズに進めることができます。
  • コードレビュー: メンターによるコードレビューが定期的に行われ、自分の書いたコードの品質や改善点を指摘してもらえます。これにより、プログラミングのスキルをより高めることができます。

キャリアサポートの詳細

キャリアサポートについても具体的に見ていきましょう。DMM WEBCAMPでは、受講生の就職活動を全面的にサポートするための体制が整っています。

  • 履歴書・職務経歴書の添削: プロのキャリアアドバイザーが履歴書や職務経歴書の添削を行い、効果的な書き方を指導してくれます。
  • 面接対策: 模擬面接を通じて、実際の面接での対応方法や質問への答え方を練習します。これにより、自信を持って本番の面接に臨むことができます。
  • 企業マッチング: 多くの提携企業からの求人情報が提供され、受講生に最適な企業とのマッチングが行われます。これにより、希望する職種や業界での就職がスムーズに進みます。

卒業後のフォローアップ

DMM WEBCAMPでは、卒業後もフォローアップを行っており、受講生のキャリア形成をサポートしています。

  • 定期的なキャリア相談: 卒業後もキャリアアドバイザーとの相談が可能で、キャリアの方向性やスキルアップについてのアドバイスを受けられます。
  • ネットワーキングイベント: 定期的に開催されるネットワーキングイベントを通じて、業界の最新情報を得たり、他のエンジニアとのつながりを持つことができます。
  • オンラインコミュニティ: 卒業生専用のオンラインコミュニティがあり、情報交換やサポートが受けられます。このコミュニティでは、仕事上の悩みや技術的な疑問を気軽に相談できます。

実際の体験談

わたしの体験を少し具体的に話すと、最初は全くの未経験で、プログラミングなんて正直難しそうだと感じていました。しかし、DMM WEBCAMPのカリキュラムとメンターのサポートのおかげで、少しずつ自信がついていきました。

特に印象に残っているのは、初めて自分の手でウェブアプリを作り上げたときです。最初は全くわからなかったコードも、毎日の学習とメンターの指導で少しずつ理解できるようになり、最終的には自分の力でアプリを完成させることができました。この達成感は、本当に言葉にできないほどでした。

また、学習期間中は24時間対応のオンラインサポートが非常に役立ちました。夜遅くに学習していて行き詰まったときでも、チャットで質問すればすぐに答えてもらえました。これにより、スムーズに学習を進めることができました。

さらに、DMM WEBCAMPでの学びを通じて得たスキルを実際の仕事で活用できる点も大きな魅力です。例えば、学習中に開発したプロジェクトをポートフォリオとして活用し、面接でアピールすることができました。この実際のプロジェクト経験が、採用担当者にとって非常に重要な評価ポイントとなり、内定獲得につながりました。

卒業後の就職活動

卒業後は、キャリアサポートを活用して就職活動を行いました。面接の練習や履歴書の添削など、丁寧にサポートしてもらえたおかげで、自信を持って面接に臨むことができました。そして、無事にIT企業でエンジニアとして内定をもらうことができました。

DMM WEBCAMPのキャリアサポートは非常に手厚く、就職活動の一環として企業とのマッチングイベントにも参加しました。これにより、自分に合った企業を見つけることができ、スムーズに内定を獲得することができました。

また、DMM WEBCAMPのキャリアサポートチームは、受講生一人一人の強みや希望を理解し、それに応じた企業を紹介してくれます。わたしの場合、フロントエンド開発に特化したスキルを伸ばしたいと考えていたため、その希望に合った企業を複数紹介してもらい、最終的には自分に最適な企業に内定をもらうことができました。

メリット

わたしが感じたDMM WEBCAMPのメリットを以下にまとめます。

  1. 実践的なカリキュラム: 実際のプロジェクトを通じて学ぶので、即戦力としてのスキルが身につく。
  2. 手厚いサポート: メンター制度や24時間対応のオンラインサポートなど、困ったときにすぐに助けを求められる。
  3. 柔軟な学習スタイル: オンラインとオフラインの両方で学べるので、自分のペースで学習できる。
  4. キャリアサポート: 就職活動に向けた手厚いサポートがあり、卒業後の転職活動もスムーズに進められる。
  5. 高いコストパフォーマンス: 手頃な価格設定で、分割払いも可能。一定の条件を満たせば返金保証もある。

デメリット

もちろん、DMM WEBCAMPにも改善の余地があると感じる点もあります。わたしが感じたデメリットは以下の通りです。

  1. 短期間での学習のハードル: 集中して学習する必要があるため、特にまったくの未経験者にとっては最初の1ヶ月間はかなりの努力が求められると思います。人によっては毎日8時間以上の学習が必要になるかもしれません。
  2. 自分のペースでの学習: オンラインでの学習は自分のペースで進められる反面、自己管理が難しい場合もあります。
  3. 費用が少し高いと感じる場合も: 返金保証や分割払いの制度はあるものの、一括で支払う場合には高いと感じるかもしれません。

受講生の声

他の受講生の声も紹介します。DMM WEBCAMPの卒業生からの口コミをいくつかピックアップしました。

  • Aさん(25歳・男性): 「未経験からのスタートでしたが、メンターのサポートのおかげで無事にエンジニアとして就職することができました。実践的なカリキュラムが非常に役立ちました。」
  • Bさん(28歳・男性): 「オンラインでの学習だったので、自分のペースで学べました。キャリアサポートも充実しており、転職活動がスムーズに進みました。」
  • Cさん(30歳・男性): 「費用は少し高いと感じましたが、それだけの価値があると思います。学んだスキルをすぐに仕事で活かすことができました。」
  • Dさん(27歳・男性): 「短期間で多くのことを学びました。特に、実際のプロジェクトを通じて学べたことが大きかったです。メンターのサポートも素晴らしかったです。」
  • Eさん(29歳・男性): 「DMM WEBCAMPのおかげで、未経験からエンジニアに転職することができました。カリキュラムが実践的で、すぐに現場で役立つスキルを身につけることができました。」

他のプログラミングスクールとの比較

DMM WEBCAMPを他のプログラミングスクールと比較することで、その特徴をより明確に理解することができます。

TechAcademy

TechAcademyも人気のプログラミングスクールであり、オンラインで学習を提供しています。TechAcademyの特徴は、個別メンター制度と実務に直結したカリキュラムがあります。

CodeCamp

CodeCampは、オンラインでの個別指導を特徴とするプログラミングスクールです。CodeCampの強みは、マンツーマンレッスンと柔軟なスケジュール対応にあります。

TECH::CAMP

TECH::CAMPは、短期集中型のブートキャンプ形式のプログラミングスクールです。TECH::CAMPも実践的なカリキュラムを提供しています。

SAMURAI

SAMURAIは、マンツーマンの個別指導を特徴とするプログラミングスクールです。SAMURAIの強みは、生徒一人一人に対するオーダーメイドのカリキュラムと個別指導です。これにより、自分のペースで学習を進めることができます。

DMM WEBCAMPの成長と展望

DMM WEBCAMPは、年々成長を遂げており、今後もさらなる発展が期待されています。特に注目されるのは、新しい技術の導入やカリキュラムの拡充です。

  1. 新しい技術の導入: DMM WEBCAMPは、最新の技術を積極的に取り入れています。例えば、AIやブロックチェーン技術など、今後のIT業界で求められるスキルを学ぶことができるカリキュラムが追加される予定です。
  2. カリキュラムの拡充: 既存のカリキュラムに加えて、新しいコースが導入される予定です。これにより、受講生はより幅広いスキルセットを身につけることができます。
  3. 企業との連携強化: DMM WEBCAMPは、企業との連携を強化し、より実践的なプロジェクトを提供しています。これにより、受講生は実際のビジネス環境での経験を積むことができます。

自己学習とDMM WEBCAMPのメリット

独学でプログラミングを学ぶことも可能ですが、DMM WEBCAMPのようなプログラムを利用することで得られるメリットは多くあります。

  1. 体系的な学習: DMM WEBCAMPでは、体系的なカリキュラムが用意されており、無駄のない学習が可能な点になります。独学では見逃しがちな基礎的な部分もしっかりとカバーされています。
  2. メンターのサポート: 独学では質問する相手がいないため、行き詰まることが多いですが、DMM WEBCAMPでは経験豊富なメンターがサポートしてくれます。これにより、効率的に学習を進めることができます。
  3. 実践的な経験: 実際のプロジェクトを通じて学ぶことで、実践的なスキルを身につけることができます。これにより、即戦力としてのスキルを身につけることができます。
  4. キャリアサポート: DMM WEBCAMPでは、就職活動に向けた手厚いサポートが受けられます。企業とのマッチングイベントや面接対策など、転職活動をスムーズに進めるためのサポートが充実しています。

DMM WEBCAMPでの成功体験

最後に、DMM WEBCAMPでの学習を通じて成功を収めた体験談を紹介します。

Yさん(26歳・男性)

「DMM WEBCAMPで学んだことが、現在の職場で大いに役立っています。特に、実際のプロジェクトを通じて学んだスキルは、即戦力として評価されました。メンターのサポートも素晴らしく、学習中に困ったことがあればすぐに解決できました。」

Kさん(29歳・男性)

「プログラミング未経験からのスタートでしたが、DMM WEBCAMPでの学習を通じて自信がつきました。特に、キャリアサポートが充実していたおかげで、転職活動もスムーズに進みました。現在は、IT企業でエンジニアとして働いており、毎日が充実しています。」

Mさん(31歳・男性)

「DMM WEBCAMPの実践的なカリキュラムが、私のキャリアチェンジを成功に導いてくれました。特に、実際のプロジェクトを通じて学んだスキルは、即戦力として評価されました。メンターのサポートも素晴らしく、学習中に困ったことがあればすぐに解決できました。」

Nさん(28歳・男性)

「DMM WEBCAMPを受講して本当に良かったと思っています。カリキュラムが充実しており、実際のプロジェクトを通じて多くのことを学びました。特に、メンターのサポートが非常に心強かったです。」

Oさん(30歳・男性)

「未経験からのスタートでしたが、DMM WEBCAMPで学んだことが現在の仕事に直結しています。特に、実践的なカリキュラムと手厚いキャリアサポートが大きな助けとなりました。無事にエンジニアとして就職できたのは、DMM WEBCAMPのおかげです。」

結論

DMM WEBCAMPは、プログラミングを学びたいと考えている方にとって最適な選択肢の一つです。実践的なカリキュラム、充実したサポート体制、そして手頃な価格設定で、多くの人にとって魅力的なスクールだと思います。

もし、プログラミングを学んでキャリアチェンジを目指している方や、スキルアップを考えている現役エンジニアの方がいれば、ぜひDMM WEBCAMPを検討してみてください。わたしの体験が、皆さんの参考になれば嬉しいです。

]]>
侍エンジニアレビューhttps://python-engineer.co.jp/samurai-review/Wed, 26 Jun 2024 12:14:45 +0000https://python-engineer.co.jp/?p=527侍エンジニア塾は、マンツーマン指導を特徴とするプログラミングスクールです。2013年に創業され、受講生一人ひとりに合わせたオーダーメイドカリキュラムを提供しています。特に、未経験者から現役エンジニアまで幅広い層に対応しており、転職支援やフリーランス支援も充実しています。

侍エンジニア塾の特徴

  • マンツーマン指導: 専任講師が一人ひとりに合わせた指導を行います。
  • オーダーメイドカリキュラム: 受講生の目標に応じたカリキュラムを提供。
  • 転職支援: 専属の転職コンサルタントがキャリアプランをサポート。
  • オンライン完結: すべてのコースがオンラインで受講可能。

侍エンジニア塾の良い口コミ・評判まとめ

侍エンジニア塾の良い口コミとして、特に以下の点が挙げられます。

良い口コミ

  • マンツーマン指導の質が高い: 「メンターさんは今後のキャリアについて大変親身になって相談を聞いてくださり、非常に心強く感じました!」(@rytnnnnn)
  • 転職成功率が高い: 「3ヶ月の受講を経てWeb系企業への転職ができました!」(@reverserishi)
  • オリジナルカリキュラム: 「自分に合ったカリキュラムを組んでくれたので、効率よく学べました。」(@HARUTUBE_)

侍エンジニア塾の悪い口コミ・評判まとめ

一方で、侍エンジニア塾には以下のような悪い口コミも見られます。

悪い口コミ

  • 料金が高い: 「マンツーマンレッスンは良かったけど、値段は高かった。」(@mana_I)
  • 対面型の受講ができない: 「オンラインに特化しているため、対面でのサポートを希望する人には向いていません。」(@enjunior_blog)
  • 教材の誤りが多い: 「教材の誤植が多く、確認テストの解答も危ういところがありました。」(@alcuesto_tt)

侍エンジニア塾のコース内容と料金を現役エンジニアが解説

侍エンジニア塾では、さまざまなコースが提供されています。以下に主要なコースとその料金をまとめます。

コース名内容料金
プログラミング 教養コースプログラミングの基礎を学習300,000円
WEBデザイン 教養コースコーディングもできるWebデザイナーを目指す350,000円
副業スタートコースプログラミングを副業にするためのスキルを習得400,000円
フリーランスコースフリーランスとして独立するためのスキルを習得450,000円
オーダーメイドコース受講生の目標に応じたカリキュラムを提供500,000円
WEBエンジニア 転職保証コース転職支援付きのWebエンジニアコース600,000円
クラウドエンジニア 転職保証コースAWSを学び、インフラエンジニアを目指す650,000円

侍エンジニア塾のメリットとデメリットを現役エンジニアが分析

メリット

  • マンツーマン指導: 専任講師が一人ひとりに合わせた指導を行うため、効率的に学習が進められます。
  • オーダーメイドカリキュラム: 受講生の目標に応じたカリキュラムを提供するため、無駄がありません。
  • 転職支援が充実: 専属の転職コンサルタントがキャリアプランをサポートし、転職成功率が高いです。

デメリット

  • 料金が高い: 他のプログラミングスクールと比較して料金が高めです。
  • 対面型の受講ができない: オンラインに特化しているため、対面でのサポートを希望する人には向いていません。
  • 教材の誤りが多い: 一部の教材に誤植が多いとの指摘があります。

侍エンジニア塾のカリキュラムと学習サポートの実態

侍エンジニア塾のカリキュラムは、受講生の目標に応じてオーダーメイドで提供されます。以下に、Pythonを学ぶ際のカリキュラムの例を示します。

オーダーメイドコースのカリキュラム例

期間カリキュラム内容
1~2ヶ月目機械学習の基礎を学習(機械学習基礎、Python、オブジェクト指向)
2~4ヶ月目機械学習の応用を学習(アルゴリズム基礎学習、ライブラリ基礎学習)
4~6ヶ月目成果物としてオリジナルAIサービスを開発

また、侍エンジニア塾では、24時間365日のチャットサポートやQA掲示板を利用して、学習中の疑問を解消することができます。

侍エンジニア塾の転職支援とキャリアサポートの実力

侍エンジニア塾の転職支援は非常に充実しており、以下のようなサポートが提供されています。

転職支援内容

  • キャリアカウンセリング: 専属のキャリアコンサルタントが個別にカウンセリングを行います。
  • 応募書類の作成支援: 履歴書や職務経歴書の作成をサポートします。
  • 面接対策: 模擬面接を通じて、実際の面接に備えます。
  • 求人紹介: 受講生の希望に合った求人を紹介します。

侍エンジニア塾の受講料は高い?コスパを現役エンジニアが検証

侍エンジニア塾の受講料は他のプログラミングスクールと比較して高めですが、その分、充実したサポートが提供されています。以下に、主要なプログラミングスクールとの料金比較を示します。

スクール名コース名料金特徴
侍エンジニア塾オーダーメイドコース500,000円マンツーマン指導、オーダーメイドカリキュラム
TechAcademyPythonコース339,900円オンライン完結、マンツーマンメンタリング
DMM WEBCAMPPythonコース339,900円オンライン完結、転職保証付き
CodeCampPythonコース298,000円オンライン完結、マンツーマンレッスン

侍エンジニア塾の講師陣の質と指導力を現役エンジニアが評価

侍エンジニア塾の講師陣は、現役エンジニアが多く在籍しており、実務経験を活かした指導が行われています。以下に、講師陣の質に関する口コミを紹介します。

講師陣の質に関する口コミ

  • 親身な指導: 「メンターさんは非常に親身になって相談に乗ってくれました。」(@rytnnnnn)
  • 実務経験豊富: 「現役エンジニアの講師が多く、実務に即した指導が受けられました。」(@reverserishi)
  • 柔軟な対応: 「講師が自分に合わないと思えば変更してくれるので安心です。」(@HARUTUBE_)

侍エンジニア塾と他のプログラミングスクールを比較

侍エンジニア塾と他のプログラミングスクールを比較することで、どのスクールが自分に合っているかを判断する材料になります。以下に、主要なプログラミングスクールとの比較を示します。

スクール名特徴料金転職支援オンライン対応
侍エンジニア塾マンツーマン指導、オーダーメイドカリキュラム500,000円ありあり
TechAcademyオンライン完結、マンツーマンメンタリング339,900円ありあり
DMM WEBCAMPオンライン完結、転職保証付き339,900円ありあり
CodeCampオンライン完結、マンツーマンレッスン298,000円なしあり

まとめ

侍エンジニア塾は、マンツーマン指導やオーダーメイドカリキュラム、充実した転職支援など、多くのメリットがあります。一方で、料金が高い点や教材の誤りが多い点などのデメリットもあります。自分の学習スタイルや目標に合わせて、最適なプログラミングスクールを選ぶことが重要です。

以上が、侍エンジニア塾の口コミ・評判を現役エンジニアがレビューした内容です。これらの情報を参考に、自分に合ったプログラミングスクールを見つけてください。

]]>
Pythonのsetterとgetterで使う関数名が同じなのはなぜか? どうやって使い分けているのか?https://python-engineer.co.jp/property-decorator/Wed, 19 Jun 2024 05:11:38 +0000https://python-engineer.co.jp/?p=832

Pythonの@propertyデコレータと@<name>.setterデコレータを使うと同じ名前で属性(プロパティ)に対して取得と設定ができますよね。多くの方はなぜ「同じ名前で2つの挙動に変化するのか?」と ... ]]>

Pythonの@propertyデコレータと@<name>.setterデコレータを使うと同じ名前で属性(プロパティ)に対して取得と設定ができますよね。多くの方はなぜ「同じ名前で2つの挙動に変化するのか?」と疑問に思わず通り過ぎますが、探究心旺盛なあなたのために

  • 「なぜsetterとgetterが同じ名前なのか?」
  • 「内部ではどのように使い分けられるのか?」

を解説します。

=演算子が使われたときはgetterがそうでなければsetterが実行される

結論から端的に述べると、=演算子が使われたときはgetterが、そうでなければsetterが実行されます。

例えば以下のコードでは同じageという名前でHumanクラスの_ageプロパティに値を設定・取得できます。=演算子を使ったときは42という値を設定、print(ikuma.age)のときは値を取得できます。

class Human: def __init__(self, name): self.name = name self._age = 0 @property def age(self): return self._age @age.setter def age(self, age): self._age = int(age)
ikuma = Human("ikuma")
ikuma.age = 42
print(ikuma.age) # 42

なぜこのように同じ名前で異なる挙動になるのでしょうか?

同じ名前で設定と取得できた方が読みやすく保守しやすい

そもそもの設計思想的には「設定と取得が同じ名前のほうがいいよね」、というものがあるのだと思います。その方がコーディングしやすく、コードも読みやすく、保守しやすいからです。

そのための実装が@<name>setterデコレータを使ったsetterと@propertyデコレータを使ったgetterです。公式ドキュメントに記載があります。

class property — Python 3.12.4 ドキュメント

興味深いことに、このドキュメントには@propertyデコレータを使わずにgetter、setterと同じ機能を実装する方法が以下のように書いてあります。(一部省略)

class C: def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value x = property(getx, setx, "I'm the 'x' property.")

つまりproperty関数にgetterたるgetxメソッド、setterたるsetxメソッドを渡すことでproperty関数の戻り値が変数xに格納され、xを介して設定と取得を制御できます。

propertyクラスの実装を確認する方法

上でproperty関数と述べましたが、実際はクラスです。PyCharmpropertyクラスで右クリックして「型宣言」を選択すると、builtins.pyiのclass propertyに移動してそれが確認できます。

VSCodeではpropertyクラスで右クリックして「定義へ移動」するとbuiltins.pyiが表示され確認できます。

設定・取得の使い分けは__set__と__get__で行う

取得と設定をどのように使い分けるか? についてですが、このclass propertyの中に__set__メソッドと__get__メソッドがあり、設定と取得に対応しています。

=演算子が使われたら__set__が呼ばれfsetメソッドを実行、そうでなければ__get__が呼ばれfgetメソッドが実行されます。fsetfgetpropertyインスタンス生成時に設定します。もしくは追加の属性として後から設定します。

x = property(getx, setx, "I'm the 'x' property.")
# 以下のように分けてもよい
# x = property(getx, "I'm the 'x' property.")
# x.setter(setx)

=演算子を使ったときの挙動はクラスの__eq__メソッド呼出しのようなものですね。(__eq__メソッドは==演算子で比較されたときに呼び出されるメソッドです)

class obj: def __init__(self, x): self.x = x def __eq__(self, y): print("==で比較されました") return self.x == y
o = obj(1)
print(o == 1) # True
print(o == 2) # False

ここまでを冒頭Humanクラスに当てはめると以下のようになります。

class Human: def __init__(self, name): self.name = name self._age = 0 def _get_age(self): return self._age def _set_age(self, age): self._age = int(age) age = property(_get_age) age = age.setter(_set_age)
# 以下のコードと等価
# class Human:
# def __init__(self, name):
# self.name = name
# self._age = 0
#
# @property
# def age(self):
# return self._age
#
# @age.setter
# def age(self, age):
# self._age = int(age)

age = property(get_age)でゲッターを設定し、次にage.setter(set_age)でセッターを設定しています。これでageという名前でセッター、ゲッターを使い分けられるようになります。

@propertyデコレータでセッターとゲッターをPythonicに書く

これをよりスマートに、Pythonicにしたのが@propertyデコレータを使った記法です。

class Human: def __init__(self, name, height, weight): self.name = name self._age = 0 @property def age(self): return self._age @age.setter def age(self, age): self._age = int(age)

デコレータの文法と挙動は以下のようになりますよね。つまりデコレータ関数の引数func関数本体が渡されます。

def デコレータ関数(func): def ラッパー関数(*args, **kwargs): # 前処理 result = func(*args, **kwargs) # 後処理 return result # 渡された関数の結果を返却 return ラッパー関数
@デコレータ関数
def 関数本体(): # 何らかの処理
result = 関数本体()

冒頭Humanクラスではageメソッドに@propertyが付いていますので、property関数(実際はクラス)にはageが渡されます。@age.setterpropertyインスタンスにセッターを設定しています。これで同じageという名前で使い分けられるようになります。

class Human: def __init__(self, name): self.name = name self._age = 0 @property def age(self): return self._age @age.setter def age(self, age): self._age = int(age)
ikuma = Human("ikuma")
ikuma.age = 42
print(ikuma.age) # 42

つまり@propertyデコレータを使うことで任意のメソッドがpropertyインスタンスになり、同じ名前のメソッドが=演算子の有無によって__set____get__が使い分けられる仕組みです。

propertyクラスのCpythonの実装

ちなみにPyCharmで表示できるbuiltins.pyiでは以下のように__get____set__の実装がよく分かりませんよね。

Pythonの実装であるCPythonのdescrobject.cを見るともう少し詳しく書いてあります。

ただ、このあたり私も詳しくはよく分かりませんので雰囲気だけでもつかんでいただければと。

まとめ

この記事では

  • なぜ@propertyデコレータを使うと同じ名前でプロパティに対して取得と設定ができるのか?
  • なぜsetterとgetterが同じ名前なのか?
  • 内部ではどのように使い分けられるのか?

という疑問を解説しました。結論は@propertyデコレータを使うことで任意のメソッドがpropertyインスタンスになり、=演算子の有無によって同じ名前のメソッドが設定と取得に使い分けられるようになります。

]]>
初心者必修!PyCharm必修機能の使い方とショートカットキー10選。https://python-engineer.co.jp/pycharm-shortcut/Tue, 18 Jun 2024 06:38:09 +0000https://python-engineer.co.jp/?p=711

プロフェッショナルが好むPython専用の開発環境であるPyCharmですが機能が多すぎてどこから始めればいいか迷いますよね。この記事では初心者向が最初に覚えるべき機能とその機能を呼び出すためのショートカットキー10種類 ... ]]>

プロフェッショナルが好むPython専用の開発環境であるPyCharmですが機能が多すぎてどこから始めればいいか迷いますよね。この記事では初心者向が最初に覚えるべき機能とその機能を呼び出すためのショートカットキー10種類を解説します。

機能補足キー(Windows)キー(Mac)
検索メニュー表示検索メニューを呼び出すShiftを素早く2回押すShiftを素早く2回押す
コードの整形PEP8をふまえたものに修正Ctrl+Alt+LCmd+Opt+L
インポート最適化未使用モジュールの記述削除や並び順修正Ctrl+Alt+OCmd+Opt+O
コメントのオンオフ複数行も一気にオンオフCtrl+/Cmd+/
変数・関数・モジュールの名前変更使用箇所を一気に変更。文字列内で使われている名前は変更されないことも。Shift+F6Shift+F6
実行モジュールを実行Shift+F10Ctrl+R
デバッグ実行ブレークポイントを置いたところまで一気に実行Shift+F9Ctrl+D
ステップイン実行1行ずつ実行するが、関数などの中に入るF7F7
ステップオーバー実行1行ずつ実行するが、関数などの中に入らないF8F8
式の評価デバッグ中にオブジェクトの値を確認できるウィンドウを表示Alt+F8Opt+F8
プロジェクトウィンドウの表示非表示プロジェクトウィンドウの表示非表示の切替Alt+1Cmd+1
PyCharm必修ショートカットキー

なぜショートカットキーを覚えるべきなのか?

プロのエンジニアはキーボードから手を離しマウスに持ち替えるのを嫌がるため、ショートカットキーによるアプリケーション操作を好みます。ショートカットキーを使うとコーディングが効率化され生産性と気分が上がります。

初心者からプロを目指している場合いずれショートカットキーの習得が必要になります。マウスからキーボードに移動する時間が節約でき、その分トライアンドエラーの回数を増やせ、生産性や技術力向上に寄与するためです。

プロフェッショナルが使う開発環境(IDE)であるPyCharmは当然ながらショートカットキーが充実しています。充実しすぎていて覚えきれません。

その他のオススメショートカットキーは下記リンクをご参照ください。

https://github.com/ikuma-hiroyuki/PycharmShorcutKeyResume

公式リファレンス: https://pleiades.io/help/pycharm/keymap-reference.html

なお、本記事では検索(Ctrl+F | Cmd+F)や戻す(Ctrl+Z | Cmd+Z)、複数範囲選択(Shift+矢印キー)などの基本的なキーは割愛します。

Windows、Macどちらでも「Shiftキーを素早く2回押す」で検索メニューが表示されます。

「検索メニュー表示」はPyCharmの機能やプロジェクト内のファイル、クラス、関数などのオブジェクトをまとめて検索できるウィンドウが表示されます。使いたい機能のアイコンやメニューがどこにあったかな? と迷う前にこの機能で検索する方が早いです。

日本語化プラグインをインストールしている場合でも日本語・英語どちらで入力してもヒットします。例えば「close」で検索した場合日本語の「閉じる」を含む機能も検索されます。

さらにショートカットキーが割り当てられている機能についてはショートカットキーのヒント薄く表示されるという心遣いが素晴らしいです。上の画像の例では「行コメント」の右に「Ctrl+/」、「タブを閉じる」の右に「Ctrl+F4」が表示されています。ショートカットキーを忘れてしまってもこのヒントで思い出せます

コードの整形

WindowsではCtrl+Alt+L、MacではCmd+Opt+LPEP8をふまえたコードに整形できます。PEP8は読みやすいコードにするためにどのように記述したらいいか? という規約です。細かいルールがたくさんありますが覚えるのは大変なのでPyCharmに任せましょう。

下図の左側が整形前、右側が整形後です。整形前は黄色い下線ですでに警告が出ています。「PEP8違反!」とイエローカードが出されている状態です。

右側のように整形すると読みやすいコードになりますので、任意のタイミングで忘れずに整形してキレイにしましょう。ただしクォーテーション記号で囲われた文字列内やdocstring内の文字列には適用されないことがあります。

インポート最適化

WindowsではCtrl+Alt+O、MacではCmd+Opt+Oでインポート最適化が行われます。インポート最適化とは未使用ライブラリのimport文の記述を削除したり、ライブラリをPEP8に沿うように並べ替えたりします。

下図の左側が最適化前、右側が最適化後です。PEP8の細かいルールは割愛しますがライブラリがabc順になり、薄灰色の未使用ライブラリが削除されています。

import文が書かれているとモジュール内で未使用であっても読み込みに時間が掛かりリソースが無駄になります。そのため任意のタイミングで忘れずにインポート最適化を行いましょう

コメントのオンオフ

WindowsではCtrl+/、MacではCmd+/でコメント行に切り替えできます。

Pythonでは#がコメントですがこのショートカットキーを押すと選択中の行の先頭に#が付きコメントになります。すでに#が付いている場合は無くなります。

変数・関数・モジュールの名前変更

Windows、MacともにShift+F6キーで変数・関数・クラス・モジュールの名前を一気に変更できます。対象のオブジェクトによって変更ダイアログがやや違いますがテキストボックスに入力した文字で一気に置換されます。開発中はオブジェクト名を変更したくなることがよくありますのでこの機能が役に立ちます。

間違っても下図のような文字列の置換機能(Ctrl+R | Cmd+R)で一つづつ目視確認しながら名前変更していくなどというナンセンスなことをしてはいけません。バグの元です。

積極的にShift+F6キーの機能を使いましょう。

実行

WindowsではShift+F10キー、MacではCtrl+RキーでPyCharm実行構成にセットされているファイル(モジュール)が実行されます。MacはRun(実行)のRなので覚えやすいです。

実行構成とは

実行構成はPyCharm右上に表示されている下図の「現在のファイル」に相当する部分です。ここが「現在のファイル」になっていればそのままの意味で、現在コードエディタで選択中のファイルが実行されます。一方ここが特定のファイル、例えばmain.pyになっていればどんなファイルが選択されていてもmain.pyが実行されます。

なお、コードエディタは下図の右側の部分です。

実行構成に追加

ちなみに上図の「現在のファイル」を特定のファイルにする、つまり実行構成にファイルを追加するにはWindowsではCtrl+Shift+F10キー、MacではCtrl+Shift+Rキーで実行します。実行すると下図のように追加されます。

実行構成から選択して実行

この実行構成から選択して実行したい場合はWindowsではShift+Alt+F10、MacではCtrl+Opt+Rで下図の選択ダイアログが表示されるので、選択します。

デバッグ実行

WindowsではCtrl+Shift+F9キー、MacではCtrl+Dキーでデバッグ実行できます。MacはDebugのDなので覚えやすいですね。

デバッグとはDe Bug、つまりバグ取りのことで、バグはエラーになるコードです。つまり開発中に問題のあるコードを探す方法です。

デバッグ実行するとエラーになったときに問題のあるコード付近で一時停止します。実行でエラーになると例外を送出してプログラムは強制停止になりますが、デバッグ実行すれば問題を発見しやすくなりますね。

また、デバッグ実行はブレークポイントがある場所で一時停止します。ブレークポイントはWindowsではCtrl+F8、MacではCmd+F8で設置できます。ブレークポイントを置くと下図のように⚫が表示されます。ブレークポイントを置いた状態でデバッグ実行するとそこで一時停止します。

一時停止後は後述の「ステップイン実行」「ステップオーバー実行」「式の評価」が使えます。

なお、デバッグ実行でどのファイルが実行されるのか? は実行で解説した実行構成に依ります。

ステップイン実行

Windows、MacともにF7キーでステップイン実行します。ステップイン実行とはデバッグ中にコードを1行ずつする方法です。

ただし、実行コードに関数やメソッドなどがあった場合、その内部に入って行きます。後述のステップオーバー実行は内部に入らずに実行します。

例えば以下のコードをのadd(10, 20)にブレークポイントを置き、その後F7キーを押すとadd関数の内部に移動します。

def add(x, y): print(x) print(y) return x + y
add(10, 20)

ステップオーバー実行

Windows、MacともにF8キーでステップオーバー実行できます。ステップオーバー実行とはステップイン実行で示したadd関数にブレークポイントを置いて実行した場合関数の内部に入って行かずに実行する方法です。内部に入って行きませんが実行されます。

「この関数は問題ない」と分かっているときにいちいち内部に入って行くのは面倒です。このようなときにステップオーバー実行を使います。

式の評価

WindowsではAlt+F8、MacではOpt+F8で式の評価ダイアログを表示できます。「評価」とは「式」を実行して値を得ることです。

式の評価ダイアログは下図のダイアログで、デバッグ中にオブジェクトの値を確認したり、何らかの演算を行えるダイアログです。

式は複数入力できます。下図のようにカンマ区切りで入力すると結果がタプルに格納されます。また、オブジェクトの値がリストや辞書のような構造を持っている場合ツリー状に表示され、左側に表示されている下向き矢印で開閉できます。

プロジェクトウィンドウの表示非表示

WindowsではAlt+1、MacではCmd+1でプロジェクトウィンドウの表示非表示を切り替えます。プロジェクトウィンドウとはPyCharm左側に表示されるウィンドウでディレクトリやファイルを管理できる場所のことです。

コードエディタ選択中にこのキーを押すとプロジェクトウィンドウが選択され、オブジェクトを選択できるようになります。プロジェクトウィンドウからコードエディタに戻りたい場合はEscキーをで戻れます。

プロジェクトウィンドウ選択中にこのキーを押すとプロジェクトウィンドウは非表示になります。コードエディタが狭いと感じたときに便利です。

まとめ

PyCharmはかゆいところに手が届く非常に優れた開発環境です。ここで紹介した機能以外にもまだまだ便利な機能があります。が、いきなり全て覚えなくても構いません。まずはここに挙げた機能をサラサラ使えるようになりましょう。

]]>
DMM WEBCAMP Pythonの口コミと評価https://python-engineer.co.jp/dmm-webcamp-python/Mon, 17 Jun 2024 02:59:45 +0000https://python-engineer.co.jp/?p=777

目次 DMM WEBCAMP Python口コミ|転職を考える人へ向けて知っておきたい情報 DMM WEBCAMP Pythonのメリットとデメリットを徹底比較 DMM WEBCAMP Pythonの複数のコースから選択 ... ]]>

目次

DMM WEBCAMP Python口コミ|転職を考える人へ向けて知っておきたい情報

DMM WEBCAMP Pythonのメリットとデメリットを徹底比較

DMM WEBCAMP Pythonの複数のコースから選択可能

DMM WEBCAMP Pythonで学べるスキルとキャリアについて

DMM WEBCAMP Pythonの選考難易度と注意点

DMM WEBCAMP Pythonの受講料金と奨学金制度

DMM WEBCAMP Pythonで働きながら学ぶメリット

DMM WEBCAMP Pythonの独自の教育制度と特色

DMM WEBCAMP Pythonの転職成功率と実際の就職先って?

DMM WEBCAMP Python卒業生の声|転職活動の手順

DMM WEBCAMP Pythonを活用して転職成功する方法

DMM WEBCAMP PythonでAIやデータサイエンスに特化可能

DMM WEBCAMP Pythonのオンライン学習と現場での活用方法

DMM WEBCAMP Pythonの講師陣とマンツーマン指導

DMM WEBCAMP Pythonの成功事例|就職活動の準備方法

DMM WEBCAMP Pythonの企業との連携と就業支援

DMM WEBCAMP Pythonで学ぶ必須スキルと業界での評価

DMM WEBCAMP Pythonを使った具体的な開発プラン例

DMM WEBCAMP Pythonの講座内容と内容の充実度は?

DMM WEBCAMP PythonのWebデザインやUI/UXに活かせる!

DMM WEBCAMP Pythonコースの流れと学習していく方法

DMM WEBCAMP Pythonに参加する前の準備とモチベーション

DMM WEBCAMP Pythonの課題対策と失敗しない勉強法とは

DMM WEBCAMP Pythonコース修了後の進路とキャリアパス

DMM WEBCAMP Pythonの未経験からでも始められる学習方法

DMM WEBCAMP Python成功の秘訣と初心者でも活用可能なのか

DMM WEBCAMP Pythonプログラミング言語の基本から応用まで

DMM WEBCAMP Python学習の効果と実際の成果とは

DMM WEBCAMP Python転職失敗を回避するための勧めポイント

DMM WEBCAMP Python就職活動の注意点と成功事例

DMM WEBCAMP Python開始にあたって知っておくべきこと

DMM WEBCAMP Python学習を通じて得られる可能性とは

DMM WEBCAMP Python口コミから見る魅力と実際の評判

DMM WEBCAMP Pythonを利用する前に知っておきたい情報

DMM WEBCAMP Pythonを選んだ理由と実際の成果を公開

]]>