投稿

8月, 2026の投稿を表示しています

#25 C SHARPで学ぶAI API(ChatGPT等)の呼び出し方の基本

ChatGPTのような生成AIを、自分のプログラムから呼び出して使ってみたい――そんな興味を持つ人が増えています。実はC#からでも、比較的シンプルなコードでAI API(エーアイ エーピーアイ。AIの機能をインターネット経由で呼び出すための窓口のようなもの)を利用できます。この記事では、C#でAI APIを呼び出す際の基本的な流れと、押さえておきたい注意点を初心者向けに解説します。 AI APIって何をしているの? AI API(APIはApplication Programming Interfaceの略で、「プログラム同士が会話するための決まりごと」のことです)を使うと、自分のアプリからインターネットを通じて「この文章に返事をください」といったお願いを送れます。すると、AIが考えた答えを受け取ることができます。多くのAIサービスは、この仕組みをHTTP通信(Webサイトを見るときと同じ仕組みの通信)で提供しており、C#からも他の言語と同じように利用できます。 必要なもの 利用したいAIサービスのAPIキー(利用者を識別するための合言葉のような文字列) .NET SDK(C#のプログラムを動かすための開発環境) インターネット接続 C#でAPIを呼び出す基本の書き方 C#には HttpClient というクラス(通信機能をひとまとめにした部品)が標準で用意されており、これを使ってAI APIにリクエスト(要求)を送ります。大まかな流れは次の3ステップです。 送りたい内容(質問文など)をJSON形式(データをやり取りするための共通フォーマット)に変換する HttpClient でAPIのアドレスにリクエストを送る 返ってきたJSONを読み取り、必要な部分(AIの返答文)を取り出す コードのイメージは以下のようになります(実際のAPIキー・URL・モデル名は利用するAIサービスに合わせて読み替えてください)。 using System.Net.Http.Json; // apiKeyには事前に取得したAPIキーの文字列を入れておく var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "...

#25 C Plusで学ぶAI API(ChatGPT等)の呼び出し方の基本

ChatGPTのようなAI(人工知能)が答えを返してくれる仕組みは、実はシンプルです。「API」と呼ばれる窓口にインターネット経由でお願い事(リクエスト)を送り、返事(レスポンス)を受け取っているだけなのです。この記事では、C++からAI APIを呼び出すための基本的な考え方と、最低限おさえておきたい注意点を初心者向けに解説します。 AI APIを呼び出すとはどういうことか API(エーピーアイ)とは「Application Programming Interface」の略で、プログラム同士がやり取りするための決まりごとのことです。ChatGPTを提供しているサービスなどでは、Webサイトの画面を使わなくても、決められた形式でデータを送るだけでAIに質問を投げかけることができます。そして、AIからの答えも同じように受け取れます。 このやり取りには、Webブラウザがサイトを表示するときと同じ「HTTP」という通信の仕組みが使われます。具体的には、質問文などをJSON(ジェイソン)という形式のテキストにまとめて送り、AIからの返事もJSON形式で返ってくる、という流れです。JSONは「キーと値のペア」を並べたシンプルなデータ形式で、多くのプログラミング言語で扱いやすいよう設計されています。 C++でHTTP通信をするにはlibcurlが定番 PythonやJavaScriptには標準でHTTP通信を行う機能が用意されていることが多いのですが、C++には標準機能としてのHTTP通信手段がありません。そこで広く使われているのが「libcurl」という外部ライブラリです。libcurlはコマンドラインツール「curl」の中身を担っているライブラリで、C言語向けに作られていますが、C++からもそのまま利用できます。 libcurlを使う場合、大まかな流れは次のようになります。 curl_easy_init() で通信の準備をする curl_easy_setopt() で送信先のURLや、送るデータ、認証情報などを設定する curl_easy_perform() で実際に通信を実行する 返ってきたレスポンス(応答)を受け取る curl_easy_cleanup() で後片付けをする C++では自分でメモリの確保・解放を管理する場面が多く、libcu...

#25 Rubyで学ぶAI API(ChatGPT等)の呼び出し方の基本

ChatGPTのようなAI(人工知能)を、自分のプログラムから呼び出せたら便利だと思ったことはありませんか。実は難しい専用ソフトを使わなくても、Rubyの標準的な仕組みだけでAI APIを呼び出すことができます。この記事では、RubyからAI APIを利用する基本の流れを、初心者向けにやさしく解説します。 AI APIとは何か API(エーピーアイ、Application Programming Interfaceの略)とは、プログラム同士が機能をやり取りする窓口のような仕組みです。AI APIは、AIの会社が用意しているサーバーに「この質問に答えて」とお願いすると、AIが考えた答えを返してくれる仕組みです。自分のパソコンでAIモデルを動かす必要がないため、比較的手軽に使えるのが特徴です。 APIリクエストの基本の流れ AI APIを使うときの流れは、だいたいどのサービスでも共通しています。 APIキー(利用者を識別するための暗号のような文字列)を取得する HTTP通信(インターネット上でデータをやり取りする方法)を使って、質問文などのデータを送る AIからの返事(JSONというテキスト形式のデータ)を受け取る 受け取ったデータから、必要な部分だけを取り出して使う Rubyでこの通信を行うには、標準ライブラリの net/http を使う方法があります。ほかにも、 httparty や faraday といった外部のgem(Rubyの便利な拡張機能をまとめたパッケージ)を使う方法もあります。標準ライブラリだけでも十分動きますが、外部gemを使うとコードがすっきり書けることが多いです。 net/httpを使った送信の例 require 'net/http' require 'json' require 'uri' uri = URI('https://api.example.com/v1/chat') http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri) request['Content-Type'] =...

#25 Swiftで学ぶAI API(ChatGPT等)の呼び出し方の基本

SwiftアプリからAI API(ChatGPT等)を呼び出してみよう 最近は、アプリの中にChatGPTのような「AI(人工知能)」の機能を組み込む場面が増えてきました。実は、SwiftでもiPhoneアプリ(iOS)やMacアプリ(macOS)から、インターネット越しにAIサービスへ質問を送り、回答を受け取ることができます。この記事では、SwiftからAI APIを呼び出す基本的な流れと、初心者がつまずきやすいポイントを解説します。 そもそも「API」とは何か API(エーピーアイ、Application Programming Interfaceの略)とは、あるプログラムやサービスの機能を、外部のプログラムから利用できるようにした「窓口」のようなものです。ChatGPTのようなAIサービスの多くは、インターネット上に用意された窓口(APIエンドポイント)にデータを送ると、AIが処理した結果を返してくれる仕組みになっています。 この「データを送って結果を受け取る」やり取りは、Web APIと呼ばれる形式で行われることが多くあります。SwiftアプリからもHTTP通信(Webページの読み込みなどに使われる通信方式)を使ってやり取りします。 SwiftでHTTP通信を行う基本:URLSession Swiftで外部のサーバーと通信するときは、標準ライブラリに含まれる URLSession というクラスを使うのが基本です。URLSessionは、URLを指定して通信リクエストを送り、結果を受け取るための仕組みで、追加のライブラリをインストールしなくても使えます。 Swift 5.5以降では、 async/await という書き方が使えます。これを使うと、非同期処理(時間のかかる処理を待っている間も他の処理を止めない仕組み)をシンプルに書けるようになりました。以前は「完了したら呼ばれる関数(クロージャ)」を入れ子にして書く必要がありました。しかしasync/awaitのおかげで、あたかも上から下へ順番に処理が進むかのように読みやすいコードになります。JavaScriptのasync/awaitに近い感覚で書けるので、他言語の経験がある人にはなじみやすいはずです。 実際のコード例 以下は、AI API(ChatGPTのようなチャット形式の応答を返す...

#25 Javaで学ぶAI API(ChatGPT等)の呼び出し方の基本

はじめに ChatGPTのようなAI(人工知能)は、実は「API(エーピーアイ)」という仕組みを通じて、自分のプログラムから呼び出すことができます。APIとは「Application Programming Interface」の略で、あるサービスの機能を外部のプログラムから利用できるようにする「窓口」のようなものです。Javaは企業システムなどでよく使われる言語ですが、AI APIを呼び出す仕組みは意外とシンプルです。この記事では、JavaからAI APIを呼び出す基本の流れを、初めての人にもわかるように解説します。 AI APIを使う前に知っておきたいこと APIキーとは何か 多くのAIサービスは、誰でも自由に使えるわけではなく「APIキー」と呼ばれる文字列を発行しています。これは利用者を識別するための合言葉のようなもので、リクエスト(サービスへの依頼)に添えることで「誰がどれだけ利用したか」をサービス側が把握できる仕組みです。APIキーは家の鍵と同じくらい大切な情報です。コードに直接書いてGitHubなどに公開してしまうと、第三者に無断で使われてしまう恐れがあるため、環境変数(プログラムの外側で値を管理し、実行時に読み込む仕組み)などを使って管理するのが基本です。 JavaはHTTP通信の準備が少し多め PythonやJavaScriptでは、外部ライブラリなしでも比較的簡単にWeb通信ができる場合があります。一方Javaは「型(データの種類)」をきっちり指定する言語なので、通信内容やJSON(データをやり取りするための文字列形式)の扱いに一手間かかる印象があります。ただしJava11以降では java.net.http.HttpClient という通信用の機能が標準ライブラリに追加され、以前より簡潔にHTTP通信を書けるようになりました。今回はこの標準機能だけを使い、追加のライブラリなしでAI APIを呼び出す方法を紹介します。 HttpClientを使った呼び出し方の基本 HttpClient は、Webサービスにリクエストを送り、返ってきたレスポンス(応答)を受け取るためのJava標準の仕組みです。基本の書き方は次のようになります。 import java.net.URI; import java.net.http.HttpCl...

#25 Kotlinで学ぶAI API(ChatGPT等)の呼び出し方の基本

はじめに ChatGPTのようなAI(人工知能)が返してくれる文章を、自分の作ったアプリから呼び出してみたいと思ったことはありませんか。実はAI開発企業の多くは「API(エーピーアイ)」と呼ばれる仕組みを公開しています。これを使えば、自分のプログラムからAIに質問を送り、回答を受け取ることができます。APIとは、あるプログラムが別のプログラムの機能を呼び出すための「窓口」のようなものです。この記事では、Android開発などでも人気のプログラミング言語Kotlin(コトリン)を使って、AI APIを呼び出す基本の流れを解説します。 AI APIを呼び出す仕組みをざっくり理解する AI APIとのやり取りは、多くの場合「HTTP通信」で行われます。HTTP通信とは、Webブラウザがサーバーにページを要求するときと同じ仕組みで、プログラム同士がインターネット経由でデータをやり取りする方法です。手順を簡単にまとめると、次のようになります。 質問したい内容を「JSON」という形式のテキストにまとめる それをAPIの窓口(URL)に向けて送信する(これを「リクエスト」と呼びます) AI側が回答をJSON形式で返してくる(これを「レスポンス」と呼びます) 受け取ったJSONの中から、必要な文章部分だけを取り出す JSONとは、データを「キー」と「値」のペアで表す、多くのプログラミング言語で読み書きしやすいテキスト形式です。KotlinでもJSONを扱うためのライブラリ(便利な機能をまとめた部品)が用意されているので、難しく考える必要はありません。 Kotlinで通信する準備 Kotlinで外部のAPIと通信する場合、代表的な方法としてOkHttp(オーケーエイチティーティーピー)というライブラリを使う方法があります。OkHttpはHTTP通信を簡単に行うための定番ツールで、Android開発でも広く使われています。ビルドツール(プログラムの部品を管理する仕組み)であるGradleの設定ファイルに、次のように依存関係を追加します。 implementation("com.squareup.okhttp3:okhttp:4.12.0") これでOkHttpの機能がプロジェクト内で使えるようになります。 実際にリクエストを送るコ...

#25 Pythonで学ぶAI API(ChatGPT等)の呼び出し方の基本

はじめに ChatGPTのようなAI(人工知能)を、自分のPythonプログラムから呼び出せたら便利だと思ったことはありませんか。実は「API(エーピーアイ)」という仕組みを使えば、初心者でも数行のコードでAIに質問を投げて答えを受け取ることができます。APIとは「Application Programming Interface」の略で、簡単に言うと「あるサービスの機能を、プログラムから使わせてもらうための窓口」のことです。この記事では、PythonからAI APIを呼び出す基本的な流れを、初めての人にもわかるように解説します。 AI APIを使う前に知っておきたいこと APIキーとは何か 多くのAIサービスは、誰でも自由に使えるわけではなく「APIキー」と呼ばれる、いわば合言葉のような文字列を発行しています。このキーをリクエスト(サービスへの依頼)に添えることで、「あなたが誰で、どれだけ利用したか」をサービス側が把握できる仕組みです。APIキーは家の鍵のようなものなので、他人に見せたり、そのままコードに書いてSNSやGitHubに公開したりしないよう注意しましょう。 APIキーは環境変数で管理する APIキーをコードに直接書き込む(ハードコーディングと呼びます)のは避けたい書き方です。代わりによく使われるのが「環境変数」という、OS(パソコンの基本ソフト)側にこっそり値を保存しておく仕組みです。Pythonでは os という標準ライブラリ(あらかじめPythonに用意されている機能集)を使って、次のように環境変数からキーを読み込めます。 import os api_key = os.environ.get("OPENAI_API_KEY") この方法なら、コード自体にはキーが書かれないため、他の人とコードを共有しても安全です。環境変数の設定方法はOSによって異なります。多くの場合、ターミナル(コマンドを入力する画面)で1行コマンドを実行するか、 .env というファイルに書いて専用ライブラリで読み込む方法が使われます。 Pythonからの呼び出し方の基本 方法1: requestsライブラリを使う Pythonには requests という、Webサービスとやり取りするための定番の外部ライブラリ(標準では入ってお...

#25 JavaScriptで学ぶAI API(ChatGPT等)の呼び出し方の基本

はじめに ChatGPTのようなAI(人工知能)に、Webページやプログラムから直接質問を送りたいと思ったことはありませんか。実は「API(エーピーアイ)」という仕組みを使えば、JavaScriptからでもAIに文章を投げて、返ってきた答えを画面に表示することができます。APIとは「Application Programming Interface」の略です。あるサービスの機能を外部のプログラムから使わせてもらうための「窓口」のようなものです。この記事では、JavaScriptからAI APIを呼び出す基本の流れを、初めての人にもわかるように解説します。 AI APIを使う前に知っておきたいこと APIキーとは何か 多くのAIサービスは、誰でも自由に使えるわけではなく「APIキー」と呼ばれる文字列を発行しています。これはサービスを利用するための合言葉のようなもので、リクエスト(サービスへの依頼)に添えることで「誰がどれだけ利用したか」をサービス側が把握できる仕組みです。APIキーは家の鍵と同じくらい大切な情報なので、コードにそのまま書いてSNSやGitHubに公開したりしないよう注意しましょう。 ブラウザとNode.jsでの違い JavaScriptには大きく分けて、Webブラウザ上で動かす場合と、Node.js(サーバー側でJavaScriptを実行できる環境)で動かす場合があります。ここで気をつけたいのが、ブラウザのコードにAPIキーを直接書いてしまうと、Webページのソースを見れば誰でもキーを見られてしまうという点です。そのためAPIキーを使うAI API呼び出しは、基本的にNode.jsなどのサーバー側で行います。ブラウザからは、そのサーバーを経由してAIに問い合わせるという形にするのが安全とされています。 fetch APIを使った呼び出し方の基本 JavaScriptには fetch という、Webサービスと通信するための標準機能が最初から用意されています。Pythonなどでは外部ライブラリをインストールして通信を行うことが多いですが、JavaScriptでは fetch が言語やブラウザに組み込まれています。そのため、追加の準備なしにすぐ使い始められるのが特徴です(Node.jsの場合はバージョン18以降で標準対応しています)。基...

#25 TypeScriptで学ぶAI API(ChatGPT等)の呼び出し方の基本

はじめに 最近は、ChatGPTのようなAI(人工知能)が文章を生成してくれるサービスを、自分のプログラムから呼び出して使う機会が増えてきました。こうした「AI API」を使うと、自分で作ったアプリに「文章を要約する」「質問に答える」といったAIの機能を組み込むことができます。 API(エーピーアイ)とは、あるプログラムが別のプログラムの機能を呼び出すための「窓口」のようなものです。AI APIの場合、自分のプログラムからインターネット経由でAIサービスにリクエスト(依頼)を送り、その返事(レスポンス)を受け取って使います。 この記事では、TypeScriptからAI APIを呼び出す際の基本的な考え方を、実際に動かせる形ではなくサンプルコードとして紹介します。実在のAPIキー(利用者を識別するための秘密の文字列)は使わず、仕組みの理解に絞って解説します。 AI API呼び出しの基本の流れ AI APIの利用は、おおまかに次の3ステップで進みます。 APIに送るデータ(質問文など)を用意する fetchやaxiosといった仕組みでAPIにリクエストを送る 返ってきたレスポンスを受け取り、必要な部分だけ取り出して使う この一連のやり取りは、注文を紙に書いて店員に渡し、料理が出てくるのを待つイメージに近いです。TypeScriptでは、このやり取りを型(データの形を決める仕組み)を使って安全に書けるのが大きな特徴です。 fetchで呼び出す場合 ブラウザやNode.jsに標準で用意されている fetch 関数を使うと、追加のライブラリなしでAPIを呼び出せます。 async/await という書き方を使うと、非同期処理(時間のかかる処理を待つ仕組み)を上から下へ読める順序で書けます。「レスポンスが返ってくるまで待ってから次の処理に進む」という流れを、コードの見た目通りに表現できるのが利点です。 // レスポンスの型を先に定義しておく type ChatApiResponse = { choices: { message: { content: string; }; }[]; }; async function askAI(question: string): Promise<string>...

#25 RustでAI API(ChatGPT等)の呼び出し方の基本

ChatGPTのようなAI(人工知能)の機能を自分のアプリに組み込みたいとき、多くの場合は「AI API」と呼ばれる仕組みを使います。APIとは「Application Programming Interface」の略です。簡単に言えば、「あるサービスの機能を、プログラムから呼び出せるようにした窓口」のことです。この記事では、Rustから外部のAI APIをHTTPリクエストで呼び出す基本的な流れを、初心者向けに解説します。 AI APIを呼び出すとはどういうことか ChatGPTを提供するOpenAI社などは、インターネット経由でAIに質問を送り、回答を受け取れる「AI API」を公開しています。これはWebブラウザで検索するときのように、決まった宛先(URL)にデータを送信し、返ってきた結果を受け取る仕組みです。この「データを送って結果を受け取る」通信方式を、HTTPリクエストと呼びます。Rustのプログラムからこの通信を行うことで、自分のアプリの中でAIに質問し、回答を取得できるようになります。 reqwestクレートを使う Rustには標準でHTTP通信の機能は含まれていません。そこで使うのが「クレート」と呼ばれる外部ライブラリです。クレートはPythonのライブラリやJavaScriptのパッケージに近いもので、 Cargo.toml というファイルに追記するだけで簡単に導入できます。HTTP通信でよく使われるのが reqwest というクレートです。 Cargo.toml に次のように追記します(バージョン番号は執筆時点の例なので、実際に使う際は最新版を確認してください)。 [dependencies] reqwest = { version = "0.11", features = ["json"] } tokio = { version = "1", features = ["full"] } serde_json = "1.0" ここで tokio という見慣れないクレートも一緒に入れています。これは「非同期処理」と呼ばれる、通信の待ち時間の間に他の処理を進められる仕組みを扱うためのものです。ネットワーク通信は結果が返ってくるまで時間...

#25 Goで学ぶAI API(ChatGPT等)の呼び出し方の基本

はじめに ChatGPTのようなAI(人工知能)を使ったサービスは、プログラムから「API(エーピーアイ)」と呼ばれる窓口を通して呼び出すことができます。APIとは、あるプログラムが別のプログラムの機能を使うための「決められたやり取りのルール」のことです。難しく聞こえますが、実はやっていることはシンプルで、「インターネット越しにデータを送って、返ってきたデータを受け取る」だけです。 この記事では、Go言語を使ってAI APIのようなWebサービスを呼び出す際の「基本の型」を解説します。実際のサービスに接続するコードそのものというより、どんな流れで書けば良いのかという考え方を身につけることが目的です。 AI APIとのやり取りの流れ ChatGPTのようなAI APIの多くは、次のような流れで動いています。 「こう質問したい」という内容をJSON(Webでよく使われるデータの形式)にまとめる そのJSONをHTTP(インターネット通信の約束事)のPOSTリクエストとしてAPIのサーバーに送る サーバーがAIに問い合わせて、答えをJSONで返してくる 返ってきたJSONを読み取り、必要な部分(AIの回答文など)を取り出す つまり「JSONを作る → 送る → JSONを受け取って読む」という3ステップが基本の流れです。Goでこれをどう書くか、順番に見ていきましょう。 net/httpでPOSTリクエストを送る GoにはHTTP通信を行うための標準ライブラリ net/http が最初から用意されています。PythonのrequestsやJavaScriptのfetchのような外部ライブラリを別途インストールしなくても、標準機能だけでAPI通信ができるのがGoの特徴の一つです。 POSTリクエスト(サーバーにデータを送るタイプのリクエスト)を送る基本形は次のようになります。 req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData)) if err != nil { log.Fatal(err) } req.Header.Set("Content-Type", "application/json") ...

#20 JavaScriptで学ぶ関数の応用(デフォルト引数・可変長引数)の基本

JavaScriptで関数を使っていると、悩むことはありませんか。「引数を渡し忘れたらエラーになってしまう」「引数の数が決まっていないときはどうすればいいの?」といった場面です。今回は、そんな悩みを解決してくれる「デフォルト引数」と「可変長引数」という2つの機能を紹介します。どちらも関数をより柔軟に、読みやすく書くための仕組みです。 デフォルト引数とは 関数を呼び出すとき、引数(関数に渡す値)を省略すると、その値は undefined (値が定義されていないことを表す特別な値)になります。そのままだと計算に使ったときに意図しない結果になりがちです。 そこで便利なのが「デフォルト引数」です。これは、引数が渡されなかったときに自動で使われる初期値をあらかじめ設定しておく仕組みです。書き方はとてもシンプルで、引数名の後ろに = 初期値 を書くだけです。 function greet(name = "ゲスト") { console.log(`こんにちは、${name}さん`); } greet(); // こんにちは、ゲストさん greet("田中"); // こんにちは、田中さん このように、引数を省略した場合は自動的に「ゲスト」が使われます。以前は関数の中で if 文を使って「値が渡されていなければ初期値を代入する」という処理を書く必要がありましたが、デフォルト引数を使えば1行で済みます。 なお、デフォルト引数には固定の値だけでなく、他の変数を使った計算式や、別の関数の呼び出し結果を指定することもできます。この柔軟さはJavaScriptらしい特徴のひとつです。 可変長引数(残余引数)とは 次に紹介するのは「可変長引数」です。これは、関数に渡す引数の数が決まっていない場合に使う書き方です。例えば「合計を計算する関数」を作るとき、渡す数値が2個の場合も5個の場合もあり得ますよね。そんなときに便利なのが、引数名の前に ... (ドット3つ)を付ける「残余引数(rest parameters)」という書き方です。 function sum(...numbers) { return numbers.reduce((total, n) => total + n, 0); } co...

#20 Pythonで学ぶ関数の応用の基本

前回の記事では、Pythonの関数の基本と「デフォルト引数」(引数に既定値を設定できる機能)に軽く触れました。今回はそこから一歩進んで、デフォルト引数の注意点と、引数の数を自由に増やせる「可変長引数」という仕組みを詳しく見ていきます。これを使えると、より柔軟で読みやすい関数が書けるようになります。 デフォルト引数のおさらいと落とし穴 デフォルト引数とは、関数を呼び出すときに値を省略した場合に使われる、あらかじめ決めておいた値のことです。 def greet(name="ゲスト", times=1): for _ in range(times): print(f"こんにちは、{name}さん") greet() # こんにちは、ゲストさん(1回) greet("太郎", 3) # こんにちは、太郎さん(3回) ここで一つ、初心者がよくハマる注意点があります。デフォルト引数に「リスト」や「辞書」のような変更可能なデータ(専門用語で「ミュータブル」と呼びます)を指定すると、思わぬ不具合が起きることがあります。 def add_item(item, items=[]): items.append(item) return items print(add_item("りんご")) # ['りんご'] print(add_item("みかん")) # ['りんご', 'みかん'] ← 前回の結果が残っている! これは、デフォルト値の空リストが関数の定義時に一度だけ作られ、呼び出しのたびに使い回されるために起こります。対策として、デフォルト値には None を指定し、関数の中で新しいリストを作るのが定番のやり方です。 def add_item(item, items=None): if items is None: items = [] items.append(item) return items 可変長引数(*args)で引数の数を自由にする 「可変長引数」とは、呼び出し側が渡す引数の個数をあらかじめ決...

#19 Dartで学ぶテスト(単体テスト)の基本

Dartで関数を書いた後、それが正しく動くかをprintで確認するだけで済ませていませんか?この記事では、Dartで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する処理が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。特にFlutterアプリ開発では、画面を毎回操作して確認する手間を大きく減らせます。 test パッケージを使ったテストの書き方 Dartでは標準的な test パッケージがよく使われます。 pubspec.yaml の dev_dependencies に追加して導入します。 int add(int a, int b) { return a + b; } import 'package:test/test.dart'; void main() { test('2と3を足すと5になる', () { expect(add(2, 3), equals(5)); }); } test("名前", () { ... }) という形でテストケースを書き、 expect(実際の値, equals(期待値)) という書き方で「等しいはず」を宣言します。ターミナルで dart test を実行すると結果が一覧表示されます。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 test('0同士を足すと0になる', () { expect(add(0, 0), equals(0)); }); Dartならではの注意点 DartはNull安全という仕組みがあり、値が無いことを表す null を許容する型( int? など)を扱う関数では、 null を渡した時の挙動もテストしておくと安心です。またFlutterアプリでは、画面の見た目を確認する widget test という専用のテストの仕組みもあるので、慣れてきたらあわせて調べてみるとよいでしょう。 まとめ テストは「正しく動くことを保証する仕組み」であり、安心し...

#19 Scalaで学ぶテスト(単体テスト)の基本

Scalaで関数を書いた後、それが正しく動くかをprintlnで確認するだけで済ませていませんか?この記事では、Scalaで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する処理が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。 ScalaTestを使ったテストの書き方 Scalaでは ScalaTest というテスト用ライブラリがよく使われます。 build.sbt に依存関係を追加して導入します。 object Calculator { def add(a: Int, b: Int): Int = a + b } import org.scalatest.funsuite.AnyFunSuite class CalculatorTest extends AnyFunSuite { test("2と3を足すと5になる") { assert(Calculator.add(2, 3) == 5) } } AnyFunSuite を継承したクラスを作り、 test("名前") { ... } という形でテストケースを書きます。 assert(条件) で「この条件が真であるはず」を宣言します。 sbt test を実行すると結果が一覧表示されます。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 test("0同士を足すと0になる") { assert(Calculator.add(0, 0) == 0) } Scalaならではの注意点 Scalaは関数型プログラミングの考え方を取り入れており、 Option という「値があるかもしれないし、無いかもしれない」ことを表す型がよく使われます。 Option を返す関数では、値がある場合( Some )と無い場合( None )の両方をテストしておくと、想定漏れを防げます。 まとめ テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。...

#19 PHPで学ぶテスト(単体テスト)の基本

PHPで関数を書いた後、それが正しく動くかをブラウザで表示して確認するだけで済ませていませんか?この記事では、PHPで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する処理が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。 PHPUnitを使ったテストの書き方 PHPでは PHPUnit というテスト用ライブラリが定番です。Composerで composer require --dev phpunit/phpunit と導入できます。 function add($a, $b) { return $a + $b; } use PHPUnit\Framework\TestCase; class CalculatorTest extends TestCase { public function testAdd() { $this->assertEquals(5, add(2, 3)); } } TestCase を継承したクラスを作り、メソッド名を test から始めるのが決まりです。 assertEquals(期待値, 実際の値) という順番で書きます。ターミナルで ./vendor/bin/phpunit を実行すると結果が一覧表示されます。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 public function testAddWithZero() { $this->assertEquals(0, add(0, 0)); } PHPならではの注意点 PHPは緩い型変換(文字列の"5"と数値の5を同じものとして扱うなど)が起きやすい言語です。 assertEquals はこの緩い比較をするため、意図せずテストが通ってしまうことがあります。厳密に型まで一致するかを確認したい場合は assertSame を使うと安心です。 まとめ テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための...

#19 Rubyで学ぶテスト(単体テスト)の基本

Rubyでメソッドを書いた後、それが正しく動くかをirbやputsで確認するだけで済ませていませんか?この記事では、Rubyで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連するメソッドが壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。 RSpecを使ったテストの書き方 Rubyでは RSpec というテスト用ライブラリが定番です。 gem install rspec で導入できます。 def add(a, b) a + b end RSpec.describe "add" do it "2と3を足すと5になる" do expect(add(2, 3)).to eq(5) end end describe でテストの対象をまとめ、 it で個々のテストケースを書きます。 expect(実際の値).to eq(期待値) という書き方で「等しいはず」を宣言します。ターミナルで rspec と実行すると結果が一覧表示されます。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 it "0同士を足すと0になる" do expect(add(0, 0)).to eq(0) end Rubyならではの注意点 Rubyは柔軟な書き方ができる分、メソッドに想定外の型(文字列と数値を混ぜるなど)を渡してもすぐにはエラーにならないことがあります。RSpecの expect { ... }.to raise_error という書き方を使うと、「エラーが発生するはず」ということもテストできるので、異常な入力に対する挙動もあわせて確認しておくと安心です。 まとめ テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。 describe と it 、 expect の使い方から始めて、少しずつテストを増やしていきましょう。 関連記事 #15 Rubyで学ぶデバッグの基本 #16 Rubyで学...

#19 C++で学ぶテスト(単体テスト)の基本

C++で関数を書いた後、それが正しく動くかをprintf文で確認するだけで済ませていませんか?この記事では、C++で書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する関数が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。C++は特に、ポインタやメモリ管理が絡む処理でバグが起きやすいため、テストの価値が高い言語です。 Catch2を使ったテストの書き方 C++では Catch2 というテスト用ライブラリがよく使われます。ヘッダーファイル1つを追加するだけで使い始められる手軽さが特徴です。 int add(int a, int b) { return a + b; } #define CATCH_CONFIG_MAIN #include "catch.hpp" TEST_CASE("2と3を足すと5になる") { REQUIRE(add(2, 3) == 5); } TEST_CASE というマクロでテストの名前を書き、 REQUIRE マクロで「この条件が真であるはず」を宣言します。コンパイルして実行すると、テストの結果が一覧表示されます。 複数パターンをまとめてテストする SECTION を使うと、1つのテストケースの中で複数のパターンを整理して書けます。 TEST_CASE("加算のテスト") { SECTION("正の数同士") { REQUIRE(add(2, 3) == 5); } SECTION("0を含む場合") { REQUIRE(add(0, 0) == 0); } } C++ならではの注意点 C++はメモリを自分で管理する場面が多い言語です。特にポインタを使う関数では、テストの中でメモリの解放漏れ(メモリリーク)が起きていないかも意識する必要があります。 Valgrind のようなメモリ検査ツールをテストと組み合わせて使うと、通常のテストでは見つけにくいメモリ関連のバグも発見しやすく...

#19 C#で学ぶテスト(単体テスト)の基本

C#でクラスやメソッドを書いた後、それが正しく動くかをConsole.WriteLineで確認するだけで済ませていませんか?この記事では、C#で書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連するメソッドが壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。 xUnitを使ったテストの書き方 C#では xUnit というテスト用ライブラリがよく使われます。.NET CLIで dotnet new xunit とするとテスト用プロジェクトが作られます。 public class Calculator { public int Add(int a, int b) { return a + b; } } using Xunit; public class CalculatorTests { [Fact] public void TestAdd() { var calc = new Calculator(); Assert.Equal(5, calc.Add(2, 3)); } } メソッドの上に [Fact] という目印(属性)を付けるだけでテストとして認識されます。 Assert.Equal(期待値, 実際の値) という順番で書きます。ターミナルで dotnet test を実行すると結果が一覧表示されます。 複数パターンをまとめてテストする [Theory] という目印を使うと、複数の入力パターンをまとめてテストできます。 [Theory] [InlineData(2, 3, 5)] [InlineData(0, 0, 0)] [InlineData(-1, 1, 0)] public void TestAddCases(int a, int b, int expected) { var calc = new Calculator(); Assert.Equal(expected, calc.Add(a, b)); } C#ならではの注意点 C#はnull許容参照型と...

#19 Swiftで学ぶテスト(単体テスト)の基本

Swiftで関数を書いた後、それが正しく動くかをprintで確認するだけで済ませていませんか?この記事では、Swiftで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する処理が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。特にアプリ開発では、画面を毎回操作して確認する手間を減らせます。 XCTestを使ったテストの書き方 Swiftでは標準の XCTest フレームワークがテストの定番です。Xcodeでプロジェクトを作る時に「テストを含める」を選ぶと自動で準備されます。 func add(_ a: Int, _ b: Int) -> Int { return a + b } import XCTest class CalculatorTests: XCTestCase { func testAdd() { XCTAssertEqual(add(2, 3), 5) } } クラスを XCTestCase を継承する形で作り、メソッド名を test から始めるのが決まりです。 XCTAssertEqual(実際の値, 期待値) という書き方で「等しいはず」を宣言します。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 func testAddWithZero() { XCTAssertEqual(add(0, 0), 0) } Swiftならではの注意点 Swiftはオプショナル型(値が無いかもしれないことを表す型)を多用する言語です。オプショナルを扱う関数では、値が nil の場合の挙動もテストしておかないと、実機やシミュレータで初めてクラッシュに気づく、ということになりがちです。 XCTAssertNil や XCTAssertNotNil といった専用の確認方法も用意されているので活用しましょう。 まとめ テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。 XCTAssertEqual から始めて...

#19 Kotlinで学ぶテスト(単体テスト)の基本

Kotlinで関数やクラスを書いた後、それが正しく動くかをmain関数で毎回手作業で確認していませんか?この記事では、Kotlinで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する処理が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。 kotlin.testを使ったテストの書き方 Kotlinでは標準の kotlin.test や、Javaでも使われる JUnit がよく使われます。 fun add(a: Int, b: Int): Int { return a + b } import kotlin.test.Test import kotlin.test.assertEquals class CalculatorTest { @Test fun testAdd() { assertEquals(5, add(2, 3)) } } 関数の上に @Test という目印(アノテーション)を付けるだけでテストとして認識されます。 assertEquals(期待値, 実際の値) という順番で書きます。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 @Test fun testAddWithZero() { assertEquals(0, add(0, 0)) } Kotlinならではの注意点 Kotlinはnull安全という仕組みがあり、 null を許容する型( String? など)を扱う関数では、 null を渡した時の挙動もテストしておくと安心です。null許容型の扱いを間違えると実行時エラーになりやすいため、意図的に null を渡すテストケースを用意しておくとバグの早期発見につながります。 まとめ テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。 @Test と assertEquals から始めて、null許容型のテストにも意識を向けてみてください。 関連記事 #15 Ko...

#19 Javaで学ぶテスト(単体テスト)の基本

Javaでクラスやメソッドを書いた後、それが正しく動くかをmainメソッドで毎回手作業で確認していませんか?この記事では、Javaで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連するメソッドが壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。 JUnitを使ったテストの書き方 Javaでは JUnit というテスト用ライブラリが定番です。Mavenを使っている場合は pom.xml に依存関係を追加して導入します。 public class Calculator { public int add(int a, int b) { return a + b; } } import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class CalculatorTest { @Test void testAdd() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3)); } } メソッドの上に @Test という目印(アノテーション)を付けるだけでテストとして認識されます。 assertEquals(期待値, 実際の値) という順番で書くのが決まりです。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 @Test void testAddWithZero() { Calculator calc = new Calculator(); assertEquals(0, calc.add(0, 0)); } Javaならではの注意点 Javaは静的型付け言語なので、コンパイル時に多くの型ミスは防げますが、ビジネスロジック(計算結果や条件分岐)の正しさまでは保証してくれません。また、 assertEqual...

#19 Goで学ぶテスト(単体テスト)の基本

Goはシンプルな文法が魅力ですが、書いたコードが正しく動くかどうかは別問題です。この記事では、Goで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する機能が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。 Go標準のテスト機能 Goには追加のライブラリを入れなくても使える testing パッケージが標準で備わっています。テスト対象のファイルと同じディレクトリに、名前の末尾が _test.go のファイルを作ります。 // add.go package main func add(a int, b int) int { return a + b } // add_test.go package main import "testing" func TestAdd(t *testing.T) { result := add(2, 3) if result != 5 { t.Errorf("add(2, 3) = %d; want 5", result) } } テスト関数の名前は Test から始める決まりです。ターミナルで go test と実行すると、 _test.go 内の Test から始まる関数がすべて自動で実行されます。 複数パターンをまとめてテストする Goでは、複数の入力パターンをスライス(配列のようなもの)にまとめて、まとめてテストする書き方(テーブル駆動テスト)がよく使われます。 func TestAddCases(t *testing.T) { cases := []struct{ a, b, want int }{ {2, 3, 5}, {0, 0, 0}, {-1, 1, 0}, } for _, c := range cases { if got := add(c.a, c.b); got != c.want { t.Errorf("add(%d,...

#19 Rustで学ぶテスト(単体テスト)の基本

Rustはコンパイル時に多くのミスを防いでくれますが、「計算結果やロジックが正しいか」はコンパイラでは分かりません。この記事では、Rustで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コンパイラは型の不一致やメモリ安全性の問題を見つけてくれますが、「意図した計算結果になっているか」までは保証しません。テストを用意しておけば、修正のたびにコマンド一つで動作確認ができます。 Rust標準のテスト機能 Rustには追加のライブラリを入れなくても使えるテスト機能が標準で備わっています。関数の上に #[test] という目印(属性)を付けるだけです。 fn add(a: i32, b: i32) -> i32 { a + b } #[test] fn test_add() { assert_eq!(add(2, 3), 5); } assert_eq! は「左右の値が等しいはず」を宣言するマクロです。ターミナルで cargo test と実行するだけで、 #[test] が付いた関数がすべて自動で実行されます。 テスト専用モジュールにまとめる 実際のプロジェクトでは、テストを #[cfg(test)] という目印を付けたモジュールにまとめるのが一般的です。 #[cfg(test)] mod tests { use super::*; #[test] fn test_add_negative() { assert_eq!(add(-1, 1), 0); } } #[cfg(test)] を付けると、通常のビルドではこのコードが含まれず、 cargo test 実行時だけコンパイルされます。 Rustならではの注意点 Rustは所有権という仕組みがあるため、テストコードの中でも値の所有権の移動やコピーを意識する必要があります。 assert_eq! を使う際、比較する値が所有権を消費してしまう型だと、テストの書き方次第でコンパイルエラーになることがあります。困ったら値を借用(参照)する形に変えてみましょう。 まとめ Rustは標準機能だけでテストが書けるのが大きな特徴です。 #[test] と assert_eq! から始めて、...

#19 TypeScriptで学ぶテスト(単体テスト)の基本

型があるから安心、と思っていても、実際の処理内容(計算結果や条件分岐)が正しいかどうかは型だけでは保証できません。この記事では、TypeScriptで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか TypeScriptの型チェックは「引数の型が合っているか」までは保証してくれますが、「計算結果が正しいか」は別の話です。テストを用意しておけば、修正のたびにコマンド一つで動作確認ができ、安心してコードを直せるようになります。 一番簡単なテストの考え方 テストの基本は「入力を渡して、期待した出力が返ってくるか確認する」ことです。 function add(a: number, b: number): number { return a + b; } if (add(2, 3) !== 5) { throw new Error("add(2, 3)が5になりません"); } Jestを使ったテストの書き方 TypeScriptでは ts-jest を組み合わせた Jest がよく使われます。 npm install --save-dev jest ts-jest @types/jest で導入できます。 function add(a: number, b: number): number { return a + b; } test("2と3を足すと5になる", () => { expect(add(2, 3)).toBe(5); }); 設定ファイルで ts-jest を有効にしておけば、型チェックを保ったままテストコードも書けます。ターミナルで npx jest を実行すると結果が一覧表示されます。 異常系もテストしておく 正しい入力だけでなく、境界値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 test("0同士を足すと0になる", () => { expect(add(0, 0)).toBe(0); }); TypeScriptならではの注意点 型があることで「間違った型を渡すテスト」自体がコンパイルエラーになり書けない、という場面があります。意図的に不正な型を渡すテストを...

#19 JavaScriptで学ぶテスト(単体テスト)の基本

書いた関数が期待通りに動くかを、ブラウザやコンソールで毎回手作業で確かめていませんか?この記事では、JavaScriptで書いたコードを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関連する機能が壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで「壊れていないか」を数秒で確認できます。最初は手間に感じますが、後から安心して機能を追加・修正できるようになります。 一番簡単なテストの考え方 テストの基本は「入力を渡して、期待した出力が返ってくるか確認する」ことです。まずは考え方をコードで見てみましょう。 function add(a, b) { return a + b; } if (add(2, 3) !== 5) { throw new Error("add(2, 3)が5になりません"); } これでも簡易的なテストになりますが、実際の開発では次に紹介する専用のツールを使うのが一般的です。 Jestを使ったテストの書き方 JavaScriptでは Jest というテスト用ライブラリがよく使われます。 npm install --save-dev jest で導入できます。 function add(a, b) { return a + b; } test("2と3を足すと5になる", () => { expect(add(2, 3)).toBe(5); }); ターミナルで npx jest と実行すると、 test() で書かれたテストがすべて自動で実行され、結果が一覧表示されます。 expect().toBe() という書き方で「この値になるはず」を宣言します。 異常系もテストしておく 正しい入力だけでなく、想定外の値(0やマイナスの値など)を渡した時の挙動もテストしておくと安心です。 test("0同士を足すと0になる", () => { expect(add(0, 0)).toBe(0); }); JavaScriptならではの注意点 JavaScriptは非同期処理(通信結果を待ってから処理するなど)が多い言語です。非同期の処理をテストす...

#19 Pythonで学ぶテスト(単体テスト)の基本

プログラムが「思った通りに動いているか」を確認する作業を、毎回手作業でやるのは大変です。この記事では、Pythonで書いたコードが正しく動くかを自動でチェックする「テスト」の基本を解説します。 なぜテストを書くのか コードを修正するたびに、関係する機能が壊れていないかを人力で全部確認するのは現実的ではありません。テストを書いておけば、修正のたびに実行するだけで「壊れていないか」が数秒で分かります。最初は面倒に感じますが、後から安心してコードを直せるようになる投資だと考えてください。 一番簡単なテストの書き方 Pythonには標準で assert という文があります。これは「この条件が正しいはずだ」と宣言するもので、条件が偽だとエラーになります。 def add(a, b): return a + b assert add(2, 3) == 5 これだけでも簡易的なテストになりますが、実際の開発では次に紹介する専用のツールを使うのが一般的です。 pytestを使ったテストの書き方 Pythonでは pytest という外部ライブラリがテストの定番です。 pip install pytest で導入できます。テスト用のファイルを test_ から始まる名前で作り、その中に test_ から始まる関数を書きます。 def add(a, b): return a + b def test_add(): assert add(2, 3) == 5 assert add(-1, 1) == 0 ターミナルで pytest と実行するだけで、ファイル内の test_ から始まる関数がすべて自動で実行され、結果が一覧表示されます。 異常系もテストしておく 正しい入力だけでなく、想定外の入力(空文字、0、マイナスの値など)を渡した時の挙動もテストしておくと、後々のバグを減らせます。 def test_add_with_zero(): assert add(0, 0) == 0 Pythonならではの注意点 Pythonは動的型付け言語なので、関数に間違った型(文字列と数値など)を渡してもすぐにはエラーにならないことがあります。そのため、型に関するテストも意識して書くと安心です。また、 pytest は...

#15 C++で学ぶデバッグの基本

C++のデバッグは、メモリを直接扱う言語らしく、他の言語より注意深い調査が必要になることがあります。この記事では、C++におけるデバッグの基本的な方法を解説します。 std::coutでその場の状態を確認する std::cout << "ageの中身: " << age << std::endl; gdbというデバッガー C++には`gdb`という伝統的なデバッガーがあり、Visual StudioやVSCodeといったエディタからも、この仕組みを活用したデバッグ機能が使えます。 メモリ関連のバグに注意する 以前の記事でも触れた「ポインタ」を扱うC++では、存在しないメモリ領域にアクセスしてしまう、特有のバグが起こることがあります。こうしたバグは、`Valgrind`のような専用のツールを使うと発見しやすくなります。 C++ならではの注意点 C++のバグは、エラーメッセージが出ずにプログラムが突然終了する(クラッシュする)形で現れることがあります。原因がすぐに分からない場合は、`std::cout`を怪しい箇所の前後に挟んで、どこまで処理が進んでいるかを地道に確認するのが有効です。 まとめ C++のデバッグは`std::cout`と`gdb`のようなデバッガーが基本です。メモリ関連のバグには、専用ツールの活用も検討しましょう。 本ページはプロモーションを含みます。 参考書籍(PR) C++をもっと学びたい方には「 新・明解C++入門編 」がおすすめです。

#15 C#で学ぶデバッグの基本

C#のデバッグは、Visual Studioに統合された使いやすいデバッガー機能を活用するのが基本です。この記事では、C#におけるデバッグの基本的な方法を解説します。 Console.WriteLine()でその場の状態を確認する Console.WriteLine($"ageの中身: {age}"); Visual Studioのデバッガー Visual Studioには、初心者にも使いやすいデバッガーが統合されています。行番号の左側をクリックするだけでブレークポイントを設定でき、実行中の変数の値をマウスオーバーするだけで確認できます。 例外の詳細を確認する C#で例外が発生すると、Visual Studioがその場で処理を一時停止し、例外の種類やメッセージ、発生した場所を詳しく表示してくれます。 C#ならではの注意点 Visual Studioのデバッガーは非常に高機能で、変数の値を実行中に書き換えて動作を試すことまでできます。最初は基本的なブレークポイントの使い方から慣れていき、少しずつ高度な機能も試してみるとよいでしょう。 まとめ C#のデバッグは`Console.WriteLine`とVisual Studioのデバッガーが基本です。使いやすいツールを活かして、効率よく原因を調査しましょう。 本ページはプロモーションを含みます。 参考書籍(PR) C#をもっと学びたい方には「 確かな力が身につくC#「超」入門 第2版 」がおすすめです。

#18 C++で学ぶ日付と時刻の扱いの基本

C++の日付操作は、標準ライブラリの`chrono`という仕組みを使います。この記事では、C++における日付と時刻の基本的な扱い方を解説します。 chronoを使う #include <chrono> auto now = std::chrono::system_clock::now(); 経過時間を測る C++の`chrono`は、日付そのものより「処理にかかった時間を測る」用途でよく使われます。 auto start = std::chrono::steady_clock::now(); // 何らかの処理 auto end = std::chrono::steady_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start); C++ならではの注意点 C++の`chrono`は、他の言語の日付操作に比べると、扱いがやや複雑に感じられます。カレンダー形式の日付操作(年月日での計算など)をしたい場合は、比較的新しいC++の機能や、専用のライブラリを探すのもよい方法です。 まとめ C++の日付・時刻操作は`chrono`が基本で、特に処理時間の計測でよく使われます。カレンダー計算には追加の工夫や専用ライブラリも検討しましょう。 本ページはプロモーションを含みます。 参考書籍(PR) C++をもっと学びたい方には「 新・明解C++入門編 」がおすすめです。