C#をLinuxで始める完全ガイド|環境構築から実行・開発まで初心者向けに解説
はじめに
C#はWindows専用の言語というイメージを持たれがちですが、現在はLinuxでも問題なく開発できます。特に.NETがクロスプラットフォーム対応になってからは、UbuntuやDebian、Fedora、CentOS StreamなどのLinux環境で、C#のコンソールアプリ、Webアプリ、API、バッチ処理、サーバーアプリを開発・実行できるようになりました。
この記事では、「csharp linux」「C# Linux」「LinuxでC#を始めたい」と考えている初心者向けに、C#をLinuxで開発するための基礎知識、.NET SDKのインストール方法、VS Codeの設定、Hello Worldの作成、ビルド、公開、よくあるエラー対処法までを順番に解説します。
Linuxに慣れていない人でも、ターミナルで実行するコマンドを確認しながら進めれば、C#の開発環境を作ることができます。
1. C#はLinuxで開発できる?初心者が最初に知るべき基本
1-1. LinuxでもC#が使える理由
C#はもともとMicrosoftが開発したプログラミング言語ですが、現在の.NETはWindows、Linux、macOSで利用できるクロスプラットフォームな開発基盤です。.NETはLinux向けにも公式に提供されており、パッケージマネージャー、Snap、手動インストール、コンテナイメージなど複数の方法で導入できます。
そのため、Linux上でも次のようなことができます。
Bashdotnet new console
dotnet run
このように、LinuxのターミナルからC#プロジェクトを作成し、そのまま実行できます。Windows版Visual Studioがなくても、.NET SDKとエディタがあればC#開発は可能です。
1-2. .NETとC#の関係
C#はプログラミング言語で、.NETはC#で作ったアプリを開発・実行するためのプラットフォームです。
たとえば、C#で次のようなコードを書いたとします。
C#Console.WriteLine("Hello, Linux!");
このコードをコンパイルし、実行できる形にするのが.NET SDKや.NETランタイムの役割です。
関係を簡単に整理すると、次のようになります。
| 項目 | 役割 |
|---|---|
| C# | プログラミング言語 |
| .NET | アプリを作るための開発・実行基盤 |
| .NET SDK | 開発、ビルド、実行に必要なツール一式 |
| .NET Runtime | 作成済みアプリを実行するための環境 |
| dotnetコマンド | プロジェクト作成、実行、ビルドなどを行うCLI |
初心者がLinuxでC#を始める場合は、まず.NET SDKをインストールすれば問題ありません。
1-3. .NET Framework・.NET・Monoの違い
C#の情報を調べていると、「.NET Framework」「.NET」「Mono」という言葉が出てきます。これらは似ていますが、役割や対象環境が異なります。
.NET Frameworkは、主にWindows向けの従来型フレームワークです。Windows FormsやWPFなど、Windowsデスクトップアプリ開発で使われてきました。ただし、基本的にはWindows向けであり、Linuxで新しくC#を始める場合の第一候補ではありません。
.NETは、現在主流のクロスプラットフォームな開発基盤です。Linux、Windows、macOSで動作し、コンソールアプリ、Webアプリ、API、クラウドアプリ、マイクロサービスなど幅広い用途に使えます。
Monoは、.NET Framework時代からLinuxやmacOSでC#を動かすために使われてきた実装です。現在でもUnityや一部の特殊な環境で関係しますが、一般的なLinuxでのC#開発では、まず公式の.NET SDKを使うのがおすすめです。
これからC#をLinuxで学ぶなら、「C# + .NET SDK + VS Code」という構成で始めるのがもっともわかりやすいです。
1-4. LinuxでC#開発を始めるメリットと注意点
LinuxでC#を開発するメリットは多くあります。
まず、サーバー環境に近い状態で開発できます。ASP.NET Coreを使ったWebアプリやAPIはLinuxサーバー上で運用されることも多いため、開発環境もLinuxにしておくと、本番環境との差を小さくできます。
次に、DockerやGit、SSH、systemdなど、サーバー開発でよく使うツールと相性が良い点も大きなメリットです。C#で作ったアプリをLinuxサーバーに配置し、systemdで常駐化するような流れも自然に学べます。
一方で注意点もあります。Windows専用APIに依存したC#アプリは、そのままLinuxでは動かない場合があります。たとえば、Windows FormsやWPFなどのWindowsデスクトップ技術、Windows固有のファイルパス、レジストリ、COMコンポーネントなどに依存している場合は注意が必要です。
LinuxでC#を使う場合は、最初からクロスプラットフォーム対応を意識して開発することが大切です。
1-5. Linuxで開発できるC#アプリの種類
Linuxでは、次のようなC#アプリを開発できます。
| 種類 | 例 |
|---|---|
| コンソールアプリ | 学習用アプリ、CLIツール、バッチ処理 |
| Webアプリ | ASP.NET Core MVC、Razor Pages |
| Web API | REST API、バックエンドサーバー |
| 常駐アプリ | systemdで動かすワーカーサービス |
| Dockerアプリ | コンテナ化したC#アプリ |
| クラウドアプリ | Azure、AWS、GCP向けアプリ |
| テストプロジェクト | xUnit、NUnit、MSTest |
初心者は、まずコンソールアプリでC#の文法とdotnetコマンドに慣れ、その後ASP.NET CoreやDockerに進むと理解しやすいです。
2. LinuxでC#を始めるために必要なもの
2-1. 必要なソフトウェア一覧
LinuxでC#開発を始めるために必要なものは、基本的には次の4つです。
| ソフトウェア | 役割 |
|---|---|
| .NET SDK | C#アプリの作成、ビルド、実行 |
| VS Code | コードを書くためのエディタ |
| C#拡張機能 | 補完、デバッグ、エラー表示 |
| Git | ソースコード管理 |
最低限、.NET SDKとターミナルがあればC#アプリは作れます。ただし、学習効率を考えるとVS Codeも入れておくのがおすすめです。
2-2. 対応しているLinuxディストリビューション
.NETは多くのLinuxディストリビューションで利用できます。Microsoftの公式ドキュメントでは、Debian、Ubuntu、Fedora、RHEL、CentOS Stream、openSUSE、SUSE Linux Enterprise Server、Alpineなどの情報が提供されています。
初心者におすすめしやすいのは、次のディストリビューションです。
| ディストリビューション | 特徴 |
|---|---|
| Ubuntu | 情報が多く、初心者向け |
| Debian | 安定性が高い |
| Fedora | 新しいパッケージを試しやすい |
| CentOS Stream | RHEL系の学習に向いている |
| Linux Mint | Ubuntu系でデスクトップ用途に使いやすい |
迷った場合は、Ubuntu LTSを選ぶと情報量が多く、トラブル時にも調べやすいです。
2-3. .NET SDKとランタイムの違い
.NET SDKと.NET Runtimeは混同しやすいポイントです。
.NET SDKは、C#アプリを開発するためのツールです。プロジェクト作成、ビルド、実行、パッケージ管理などができます。開発者は基本的にSDKをインストールします。
.NET Runtimeは、作成済みの.NETアプリを実行するための環境です。開発はせず、サーバー上でアプリを動かすだけならランタイムのみで十分な場合があります。
初心者がLinuxでC#を始めるなら、次のように考えれば大丈夫です。
開発するPC → .NET SDKをインストール
実行だけするサーバー → .NET RuntimeまたはASP.NET Core Runtimeをインストール
.NET SDKをインストールすると、対応するランタイムも含まれるため、学習環境ではSDKだけ入れれば問題ありません。
2-4. エディタはVS Codeがおすすめ
LinuxでC#を書くエディタとしては、VS Codeがおすすめです。軽量で拡張機能が豊富で、Linuxでも使いやすいからです。
VS Codeを使うと、次のような機能を利用できます。
C#コードの補完
エラー表示
定義ジャンプ
デバッグ実行
ターミナル統合
Git連携
日本語表示
もちろん、Vim、Neovim、JetBrains RiderなどでもC#開発は可能です。ただし、初心者が最初に環境構築するなら、情報が多く設定しやすいVS Codeが無難です。
2-5. 初心者におすすめの環境構成
初心者には、次の構成がおすすめです。
OS: Ubuntu LTS
開発環境: .NET SDK
エディタ: VS Code
拡張機能: C# Dev Kit または C# 拡張機能
バージョン管理: Git
Ubuntuを使う理由は、公式ドキュメントや解説記事が多く、トラブルシューティングしやすいためです。また、LinuxサーバーでもUbuntuはよく使われるため、学習した知識をそのまま実務や個人開発に活かしやすいです。
3. Linuxに.NET SDKをインストールする方法
3-1. Ubuntuに.NET SDKをインストールする手順
Ubuntuでは、バージョンによって利用できる.NETのパッケージソースが異なります。Ubuntu 22.04以降では、Ubuntu側のフィードやバックポートを使って.NETをインストールでき、Ubuntu 24.04以降ではMicrosoftパッケージリポジトリからの配布方針にも注意が必要です。
基本的なインストール例は次の通りです。
Bashsudo apt update
sudo apt install dotnet-sdk-10.0
.NET 8を使いたい場合は、次のようにバージョン番号を変えます。
Bashsudo apt update
sudo apt install dotnet-sdk-8.0
インストールできるSDKのバージョンは、Ubuntuのバージョンや有効になっているリポジトリによって変わります。うまくインストールできない場合は、まず次のコマンドでパッケージ候補を確認します。
Bashapt search dotnet-sdk
バックポートリポジトリを追加する場合は、次のように実行します。
Bashsudo add-apt-repository ppa:dotnet/backports
sudo apt update
その後、必要なバージョンのSDKをインストールします。
Bashsudo apt install dotnet-sdk-10.0
注意点として、Ubuntuの標準リポジトリとMicrosoftリポジトリを混在させると、パッケージの競合やバージョン解決の問題が起きることがあります。1つの方法に統一して管理するのがおすすめです。
3-2. Debianに.NET SDKをインストールする手順
Debianでは、Microsoftパッケージリポジトリを登録してから.NET SDKをインストールする方法が一般的です。公式ドキュメントでも、SDKをインストールする場合は、たとえば次のようにdotnet-sdk-10.0をaptで導入する手順が示されています。
まず、パッケージリポジトリを登録します。
Bashsource /etc/os-release
wget https://packages.microsoft.com/config/debian/$VERSION_ID/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
次に、パッケージ一覧を更新してSDKをインストールします。
Bashsudo apt-get update
sudo apt-get install -y dotnet-sdk-10.0
.NET 8を使いたい場合は、次のようにします。
Bashsudo apt-get update
sudo apt-get install -y dotnet-sdk-8.0
Debian派生ディストリビューションでは、$VERSION_IDが期待通りにならない場合があります。その場合は、Debian本体の対応バージョンに合わせて手動でリポジトリURLを確認してください。
3-3. Fedora・CentOS系に.NET SDKをインストールする手順
Fedoraでは、dnfを使って.NET SDKをインストールできます。公式ドキュメントでも、Fedora向けに次のようなコマンド例が示されています。
Bashsudo dnf install dotnet-sdk-9.0
また、利用可能であれば次のように.NET 8をインストールできます。
Bashsudo dnf install dotnet-sdk-8.0
CentOS StreamやRHEL系では、AppStreamリポジトリから.NETをインストールできる場合があります。CentOS Stream 9や10、RHEL 8などでは、次のようなコマンドでSDKを導入できます。
Bashsudo dnf install dotnet-sdk-10.0
インストール可能なバージョンはディストリビューションのバージョンによって異なります。うまく入らない場合は、次のコマンドで候補を確認します。
Bashdnf search dotnet-sdk
または、パッケージ情報を確認します。
Bashdnf info dotnet-sdk-10.0
3-4. インストール後にバージョンを確認する方法
.NET SDKをインストールしたら、まず次のコマンドでバージョンを確認します。
Bashdotnet --version
詳細情報を確認したい場合は、次のコマンドを使います。
Bashdotnet --info
インストール済みのSDK一覧を確認するには、次のコマンドを使います。
Bashdotnet --list-sdks
インストール済みのランタイム一覧を確認するには、次のコマンドを使います。
Bashdotnet --list-runtimes
dotnetコマンドには、プロジェクト操作と.NETアプリ実行の2つの役割があり、--version、--info、--list-sdks、--list-runtimesなどで環境情報を確認できます。
3-5. 複数バージョンの.NET SDKを管理する方法
Linuxでは、複数の.NET SDKを同時にインストールできます。
Bashdotnet --list-sdks
たとえば、次のように複数のSDKが表示されることがあります。
8.0.4xx [/usr/share/dotnet/sdk]
9.0.3xx [/usr/share/dotnet/sdk]
10.0.1xx [/usr/share/dotnet/sdk]
プロジェクトごとに使用するSDKバージョンを固定したい場合は、global.jsonを使います。
Bashdotnet new globaljson --sdk-version 10.0.100
これにより、そのディレクトリ配下のプロジェクトでは指定したSDKバージョンが優先されます。チーム開発では、開発者ごとのSDK差分を減らせるため便利です。
4. VS CodeでC#開発環境を整える
4-1. LinuxにVS Codeをインストールする
UbuntuやDebian系では、公式のdebパッケージを使ってVS Codeをインストールできます。デスクトップ環境を使っている場合は、公式サイトから.debファイルをダウンロードしてインストールする方法が簡単です。
コマンドでインストールする場合は、環境に応じてMicrosoftのリポジトリを追加してからインストールします。
Bashsudo apt update
sudo apt install code
Fedora系では、rpmパッケージやリポジトリを使ってインストールできます。
Bashsudo dnf install code
インストール後、ターミナルで次のコマンドを実行するとVS Codeを起動できます。
Bashcode
プロジェクトフォルダをVS Codeで開く場合は、次のようにします。
Bashcode .
4-2. C#開発に必要な拡張機能
VS CodeでC#を快適に書くには、C#向けの拡張機能を入れます。
代表的な拡張機能は次の通りです。
| 拡張機能 | 役割 |
|---|---|
| C# Dev Kit | C#開発支援、プロジェクト管理、デバッグ |
| C# | C#の補完、解析、デバッグ |
| .NET Install Tool | .NET関連ツールの補助 |
| Japanese Language Pack | VS Codeの日本語化 |
初心者は、まず「C# Dev Kit」を入れるとよいでしょう。必要に応じて「C#」拡張機能や日本語パックも追加します。
拡張機能は、VS Code左側の拡張機能アイコンから検索してインストールできます。
4-3. ターミナルとVS Codeを連携する
VS Codeには統合ターミナルがあります。メニューから「ターミナル」→「新しいターミナル」を選ぶと、VS Code内でLinuxのシェルを開けます。
C#プロジェクトを開いた状態で、統合ターミナルから次のように実行できます。
Bashdotnet run
これにより、コード編集から実行までをVS Code内で完結できます。
よく使う流れは次の通りです。
Bashmkdir MyApp
cd MyApp
dotnet new console
code .
dotnet run
VS Codeの画面とターミナルを行き来しながら作業できるため、初心者でも開発の流れをつかみやすいです。
4-4. 補完・デバッグ・エラー表示を有効にする
C#拡張機能を入れると、コード補完やエラー表示が使えるようになります。
たとえば、次のように入力したときに候補が表示されます。
C#Console.
WriteLineなどの候補が表示されれば、補完機能が動いています。
デバッグを行うには、VS Codeの「実行とデバッグ」から構成を作成します。C#プロジェクトを開いていると、VS Codeが自動でデバッグ構成を提案してくれることがあります。
ブレークポイントを設定し、デバッグ実行すると、変数の中身を確認しながらプログラムを実行できます。初心者のうちは、エラーが出た箇所だけでなく、変数がどのように変化しているかを見る習慣をつけると理解が深まります。
4-5. 日本語環境で使いやすくする設定
VS Codeを日本語で使いたい場合は、「Japanese Language Pack for Visual Studio Code」をインストールします。
インストール後、コマンドパレットを開きます。
Ctrl + Shift + P
次に、次のコマンドを検索します。
Configure Display Language
jaを選択してVS Codeを再起動すると、日本語表示になります。
また、フォントやターミナルの文字化けが気になる場合は、等幅フォントを設定しておくと見やすくなります。Linux環境では、Noto Sans MonoやUbuntu Monoなどが使いやすいです。
5. LinuxでC#のHello Worldを作成・実行する
5-1. dotnet newでコンソールアプリを作成する
まず、作業用フォルダを作成します。
Bashmkdir HelloCSharp
cd HelloCSharp
次に、C#のコンソールアプリを作成します。
Bashdotnet new console
実行すると、次のようなファイルが作成されます。
HelloCSharp/
├── HelloCSharp.csproj
└── Program.cs
Program.csがC#のソースコードで、.csprojファイルがプロジェクト設定ファイルです。
5-2. Program.csの基本構造を理解する
作成されたProgram.csを開くと、次のようなコードがあります。
C#Console.WriteLine("Hello, World!");
最近のC#では、トップレベルステートメントという書き方が使われており、class Programやstatic void Mainを書かなくても実行できます。
従来の書き方にすると、次のようになります。
C#using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
初心者は、最初はシンプルなトップレベルステートメントで学び、クラスやメソッドに慣れてきたら従来の構造も理解するとよいでしょう。
5-3. dotnet runでC#プログラムを実行する
作成したC#プログラムを実行するには、次のコマンドを使います。
Bashdotnet run
実行結果は次のようになります。
Hello, World!
Program.csを次のように変更してみます。
C#Console.WriteLine("Hello, Linux!");
Console.WriteLine("C#をLinuxで実行しています。");
再度実行します。
Bashdotnet run
結果は次のようになります。
Hello, Linux!
C#をLinuxで実行しています。
このように、Linux上でもC#コードを編集してすぐに実行できます。
5-4. dotnet buildでビルドする
dotnet runは、ビルドと実行をまとめて行うコマンドです。ビルドだけ行いたい場合は、次のコマンドを使います。
Bashdotnet build
成功すると、次のようなメッセージが表示されます。
Build succeeded.
ビルド成果物は、通常次のようなディレクトリに作成されます。
bin/Debug/net10.0/
ビルドエラーがある場合は、どのファイルの何行目でエラーが起きたかが表示されます。エラーメッセージを読む習慣をつけることが、C#学習では非常に重要です。
5-5. よく使うdotnetコマンド一覧
LinuxでC#開発をするときによく使うdotnetコマンドは次の通りです。
| コマンド | 役割 |
|---|---|
dotnet --version | SDKバージョンを表示 |
dotnet --info | 環境情報を表示 |
dotnet new console | コンソールアプリを作成 |
dotnet new webapi | Web APIプロジェクトを作成 |
dotnet run | アプリを実行 |
dotnet build | アプリをビルド |
dotnet clean | ビルド結果を削除 |
dotnet test | テストを実行 |
dotnet add package | NuGetパッケージを追加 |
dotnet restore | 依存関係を復元 |
dotnet publish | 配布用に発行 |
C# Linux開発では、VS Codeよりも先にdotnetコマンドに慣れておくと、環境が変わっても対応しやすくなります。
6. LinuxでC#アプリを開発する基本フロー
6-1. プロジェクト作成から実行までの流れ
LinuxでC#アプリを開発する基本フローは次の通りです。
Bashmkdir MyApp
cd MyApp
dotnet new console
code .
dotnet run
実際の開発では、次のような流れになります。
1. プロジェクトを作成する
2. Program.csやクラスファイルを編集する
3. dotnet buildでエラーを確認する
4. dotnet runで実行する
5. 必要に応じてNuGetパッケージを追加する
6. Gitで変更を管理する
7. dotnet publishで公開用ファイルを作る
最初は小さなコンソールアプリを作り、ファイル入力、条件分岐、ループ、クラス、例外処理などを少しずつ試していくのがおすすめです。
6-2. NuGetパッケージを追加する方法
C#では、外部ライブラリをNuGetパッケージとして追加できます。たとえば、JSON操作でよく使われるNewtonsoft.Jsonを追加するには、次のコマンドを使います。
Bashdotnet add package Newtonsoft.Json
追加後、.csprojファイルにパッケージ参照が追加されます。
XML<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="..." />
</ItemGroup>
コードから使う例は次の通りです。
C#using Newtonsoft.Json;
var user = new
{
Name = "Taro",
Age = 25
};
string json = JsonConvert.SerializeObject(user);
Console.WriteLine(json);
パッケージを追加したあとは、通常dotnet runやdotnet buildのタイミングで復元されます。明示的に復元する場合は、次のコマンドを使います。
Bashdotnet restore
6-3. ファイル分割とクラス作成の基本
C#では、コードが長くなってきたらファイルを分割します。
たとえば、User.csを作成します。
C#public class User
{
public string Name { get; set; } = "";
public int Age { get; set; }
public void Introduce()
{
Console.WriteLine($"私は{Name}です。{Age}歳です。");
}
}
Program.csから呼び出します。
C#var user = new User
{
Name = "Taro",
Age = 25
};
user.Introduce();
同じプロジェクト内にある.csファイルは、自動的にビルド対象になります。そのため、特別な設定をしなくてもUser.csを追加するだけで利用できます。
クラスを分けることで、プログラムの役割が整理され、読みやすくなります。
6-4. VS Codeでデバッグ実行する方法
VS CodeでC#をデバッグするには、プロジェクトフォルダを開いた状態で、左側の「実行とデバッグ」を選びます。
基本的な手順は次の通りです。
1. C#プロジェクトをVS Codeで開く
2. C#拡張機能を有効にする
3. Program.csの行番号左をクリックしてブレークポイントを設定する
4. 実行とデバッグを開始する
5. 変数やコールスタックを確認する
たとえば、次のようなコードを書きます。
C#int x = 10;
int y = 20;
int result = x + y;
Console.WriteLine(result);
resultの行にブレークポイントを設定すると、実行中に処理が一時停止し、xやyの値を確認できます。
デバッグを使えるようになると、エラーの原因を推測だけで探す必要がなくなります。C#初心者ほど、早めにデバッグ実行に慣れておくと学習効率が上がります。
6-5. Gitでソースコードを管理する方法
C#開発では、Gitでソースコードを管理するのがおすすめです。
まず、プロジェクトフォルダでGitを初期化します。
Bashgit init
.gitignoreを作成します。
Bashdotnet new gitignore
これにより、binやobjなど、Git管理しなくてよいファイルを除外できます。
最初のコミットを作成します。
Bashgit add .
git commit -m "Initial commit"
GitHubなどのリモートリポジトリに送る場合は、次のように設定します。
Bashgit remote add origin <リポジトリURL>
git branch -M main
git push -u origin main
LinuxでC#を学ぶ場合でも、Gitの基本操作は早めに覚えておくと実務に近い開発フローを身につけられます。
7. LinuxでC#アプリを公開・配布する方法
7-1. dotnet publishで実行ファイルを作成する
開発中はdotnet runで実行できますが、配布やサーバー配置をする場合はdotnet publishを使います。
基本のコマンドは次の通りです。
Bashdotnet publish -c Release
-c Releaseは、Release構成でビルドする指定です。公開用ファイルは、通常次のような場所に作成されます。
bin/Release/net10.0/publish/
この中にあるファイルをサーバーへコピーすれば、アプリを実行できます。
Bashdotnet MyApp.dll
コンソールアプリだけでなく、ASP.NET CoreアプリをLinuxサーバーに配置する場合にもdotnet publishを使います。
7-2. フレームワーク依存と自己完結型の違い
.NETアプリの配布方法には、大きく分けて「フレームワーク依存」と「自己完結型」があります。
フレームワーク依存は、実行先の環境に.NETランタイムがインストールされている前提でアプリを配布する方法です。ファイルサイズが小さく、更新もしやすいのが特徴です。
Bashdotnet publish -c Release
実行するときは次のようにします。
Bashdotnet MyApp.dll
自己完結型は、アプリ本体に.NETランタイムも含めて配布する方法です。実行先に.NETが入っていなくても動かしやすい一方、ファイルサイズは大きくなります。
Linux x64向けに自己完結型で発行する例は次の通りです。
Bashdotnet publish -c Release -r linux-x64 --self-contained true
用途に応じて使い分けましょう。
サーバーに.NETを入れて管理する → フレームワーク依存
.NET未導入環境に配布したい → 自己完結型
7-3. Windows向け・Linux向けにビルドする方法
.NETでは、ランタイム識別子を指定して、特定OS向けに発行できます。
Linux x64向けに発行する場合は次の通りです。
Bashdotnet publish -c Release -r linux-x64
Windows x64向けに発行する場合は次の通りです。
Bashdotnet publish -c Release -r win-x64
Linux ARM64向けに発行する場合は次の通りです。
Bashdotnet publish -c Release -r linux-arm64
ただし、OS固有の機能を使っている場合は、別OS向けにビルドできても実行時に問題が出ることがあります。クロスプラットフォーム対応を意識するなら、ファイルパスや改行コード、文字コード、権限、外部コマンドの違いに注意しましょう。
7-4. サーバー上でC#アプリを実行する方法
Linuxサーバー上でC#アプリを実行する基本手順は次の通りです。
まず、ローカルで公開用ファイルを作成します。
Bashdotnet publish -c Release
次に、公開されたファイルをサーバーへコピーします。
Bashscp -r bin/Release/net10.0/publish/ user@example.com:/home/user/myapp
サーバーにSSHで接続します。
Bashssh user@example.com
アプリのディレクトリへ移動します。
Bashcd /home/user/myapp
フレームワーク依存のアプリなら、次のように実行します。
Bashdotnet MyApp.dll
ASP.NET Coreアプリの場合は、必要に応じて環境変数を指定します。
BashASPNETCORE_URLS=http://0.0.0.0:5000 dotnet MyWebApp.dll
本番環境では、直接ターミナルから起動するのではなく、systemdやNginxと組み合わせて運用するのが一般的です。
7-5. systemdでC#アプリを常駐化する方法
LinuxサーバーでC#アプリを常駐させたい場合は、systemdを使います。
まず、サービスファイルを作成します。
Bashsudo nano /etc/systemd/system/myapp.service
内容の例は次の通りです。
INI[Unit]
Description=My C# App
After=network.target
[Service]
WorkingDirectory=/home/user/myapp
ExecStart=/usr/bin/dotnet /home/user/myapp/MyApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=myapp
User=user
Environment=DOTNET_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
設定を反映します。
Bashsudo systemctl daemon-reload
サービスを起動します。
Bashsudo systemctl start myapp
自動起動を有効にします。
Bashsudo systemctl enable myapp
状態を確認します。
Bashsudo systemctl status myapp
ログを確認する場合は、次のコマンドを使います。
Bashjournalctl -u myapp -f
これで、Linuxサーバー上でC#アプリを常駐プロセスとして運用できます。
8. LinuxでC#を使うときのよくあるエラーと対処法
8-1. dotnetコマンドが見つからない場合
次のようなエラーが出る場合があります。
dotnet: command not found
これは、.NET SDKがインストールされていないか、PATHが通っていない状態です。
まず、インストールされているか確認します。
Bashwhich dotnet
何も表示されない場合は、SDKが入っていない可能性があります。Ubuntuなら次のようにインストールします。
Bashsudo apt update
sudo apt install dotnet-sdk-10.0
インストール済みなのに見つからない場合は、PATHを確認します。
Bashecho $PATH
手動インストールした場合は、.bashrcや.zshrcに次のような設定が必要なことがあります。
Bashexport DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools
設定後、シェルを再読み込みします。
Bashsource ~/.bashrc
8-2. SDKがインストールされていないと言われる場合
次のようなメッセージが出ることがあります。
The command could not be loaded, possibly because:
* You intended to execute a .NET application:
* You intended to execute a .NET SDK command:
No .NET SDKs were found.
これは、ランタイムだけがインストールされていて、SDKが入っていない場合によく起こります。
確認します。
Bashdotnet --list-sdks
何も表示されない場合は、SDKをインストールします。
Bashsudo apt update
sudo apt install dotnet-sdk-10.0
ランタイム一覧は表示されるのにSDK一覧が空の場合、開発環境としては不足しています。C#コードを書くPCにはランタイムではなくSDKを入れましょう。
8-3. VS Codeで補完やデバッグが動かない場合
VS CodeでC#の補完が効かない場合は、次の点を確認します。
1. .NET SDKがインストールされているか
2. C#拡張機能が有効になっているか
3. プロジェクトフォルダを正しく開いているか
4. .csprojファイルが存在するか
5. VS Codeを再起動したか
まず、ターミナルで確認します。
Bashdotnet --info
次に、プロジェクトルートでVS Codeを開きます。
Bashcode .
単にProgram.csだけを開いた場合、VS Codeがプロジェクト全体を認識できず、補完やデバッグがうまく動かないことがあります。必ず.csprojがあるフォルダを開きましょう。
それでも動かない場合は、拡張機能を無効化・再有効化するか、VS Codeを再起動します。
8-4. 実行権限やパスの問題が出る場合
Linuxでは、Windowsと違って実行権限やパス区切りに注意が必要です。
自己完結型で発行した実行ファイルを直接実行する場合、権限がないと次のようなエラーになります。
Permission denied
実行権限を付けます。
Bashchmod +x MyApp
その後、次のように実行します。
Bash./MyApp
また、Linuxではパス区切りに/を使います。
Windows: C:\Users\Taro\file.txt
Linux: /home/taro/file.txt
C#コード内でパスを組み立てる場合は、文字列で/や\を直接書くのではなく、Path.Combineを使うと安全です。
C#string path = Path.Combine("data", "input.txt");
8-5. Windowsで作ったC#アプリがLinuxで動かない場合
Windowsで作ったC#アプリがLinuxで動かない原因としては、次のようなものがあります。
| 原因 | 対処法 |
|---|---|
| Windows専用APIを使っている | クロスプラットフォーム対応APIに変更 |
パス区切りが\固定 | Path.Combineを使う |
| 大文字小文字の違い | ファイル名を正確に指定 |
| 文字コードの違い | UTF-8を使う |
| 改行コードの違い | Environment.NewLineを使う |
| 外部コマンドがWindows専用 | Linux用コマンドに変更 |
Linuxのファイルシステムでは、大文字小文字が区別されます。
data.txt
Data.txt
この2つはLinuxでは別ファイルとして扱われます。Windowsでは気づきにくい問題なので、ファイル名の指定には注意しましょう。
また、Windows FormsやWPFなど、Windowsデスクトップ向け技術に依存しているアプリはLinuxでそのまま動かすのが難しい場合があります。Linux対応を重視するなら、コンソールアプリ、ASP.NET Core、Web API、Worker Serviceなどから始めるのがおすすめです。
9. LinuxでC#を学ぶ次のステップ
9-1. コンソールアプリの次に学ぶべき内容
Hello Worldができたら、次はC#の基本文法を学びます。
優先して学ぶべき内容は次の通りです。
1. 変数と型
2. if文
3. for文・while文
4. 配列・List
5. メソッド
6. クラス
7. プロパティ
8. 例外処理
9. ファイル入出力
10. LINQ
Linux環境では、ファイル操作やコマンドライン引数を使った小さなツールを作ると実践的です。
たとえば、次のようなアプリを作ってみるとよいでしょう。
・入力した文字をファイルに保存するメモアプリ
・CSVファイルを読み込んで集計するアプリ
・指定ディレクトリ内のファイル一覧を表示するCLIツール
・ログファイルから特定の文字列を検索するツール
C#の基本とLinuxの操作を同時に学べるため、実用的なスキルが身につきます。
9-2. ASP.NET CoreでWebアプリを作る
C#をLinuxで使う大きなメリットの1つが、ASP.NET CoreでWebアプリやAPIを開発できることです。
Web APIプロジェクトを作成するには、次のコマンドを使います。
Bashdotnet new webapi -o MyApi
cd MyApi
dotnet run
起動後、表示されたURLにアクセスするとAPIを確認できます。
ASP.NET Coreでは、次のような開発ができます。
・REST API
・Webアプリ
・認証機能付きアプリ
・管理画面
・バックエンドサーバー
・マイクロサービス
Linuxサーバーと相性が良いため、C#でWeb開発をしたい人はASP.NET Coreに進むのがおすすめです。
9-3. DockerでC#アプリを動かす
LinuxでC#を学ぶなら、Dockerも合わせて学ぶと実践的です。
簡単なDockerfileの例は次の通りです。
dockerfileFROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Dockerイメージをビルドします。
Bashdocker build -t myapp .
コンテナを実行します。
Bashdocker run --rm myapp
ASP.NET Coreの場合は、ランタイムイメージにaspnetを使います。
dockerfileFROM mcr.microsoft.com/dotnet/aspnet:10.0
Dockerを使うと、ローカル環境と本番環境の差を減らしやすくなります。
9-4. LinuxサーバーにC#アプリをデプロイする
C#アプリをLinuxサーバーにデプロイする基本構成は次のようになります。
C# / ASP.NET Core
↓
dotnet publish
↓
Linuxサーバーへ配置
↓
systemdで常駐化
↓
Nginxでリバースプロキシ
↓
HTTPS化
Webアプリの場合、Nginxを前段に置いてリバースプロキシする構成がよく使われます。
ASP.NET Coreアプリをローカルポート5000で動かし、Nginxが80番や443番で受ける形です。
ユーザー
↓
Nginx
↓
ASP.NET Coreアプリ
この流れを理解すると、Linux上でC#アプリを本格的に運用できるようになります。
9-5. 初心者におすすめの学習ロードマップ
LinuxでC#を学ぶなら、次の順番がおすすめです。
1. Linuxの基本操作を覚える
2. .NET SDKをインストールする
3. dotnet new / run / buildに慣れる
4. C#の基本文法を学ぶ
5. クラスとオブジェクト指向を理解する
6. ファイル操作や例外処理を学ぶ
7. NuGetパッケージを使う
8. Gitでコード管理する
9. ASP.NET CoreでWeb APIを作る
10. Dockerで動かす
11. Linuxサーバーにデプロイする
12. systemdとNginxで運用する
最初からすべてを理解する必要はありません。まずは「LinuxでC#のコードを書いて実行できる」状態を作ることが大切です。
小さな成功体験を積み重ねることで、C# Linux開発の全体像が自然に見えてきます。
まとめ
C#は現在、Linuxでも十分に開発できるプログラミング言語です。.NETがクロスプラットフォーム対応しているため、Ubuntu、Debian、Fedora、CentOS StreamなどのLinux環境で、C#アプリを作成・実行・公開できます。
初心者がLinuxでC#を始めるなら、まずは次の構成を用意しましょう。
Linuxディストリビューション: Ubuntu LTSなど
開発環境: .NET SDK
エディタ: VS Code
拡張機能: C# Dev Kit
ソース管理: Git
最初に覚えるべきコマンドは、次の5つです。
Bashdotnet --version
dotnet new console
dotnet run
dotnet build
dotnet publish
これだけでも、C#の基本的な開発フローを体験できます。
LinuxでC#を使えるようになると、コンソールアプリ、Web API、ASP.NET Coreアプリ、Dockerアプリ、Linuxサーバー上の常駐アプリなど、幅広い開発に進めます。
まずは小さなHello Worldから始め、少しずつクラス、NuGet、Git、デバッグ、公開、サーバー運用へとステップアップしていきましょう。

