結論

アプリケーション(アプリ)とは、文書作成・計算・連絡・ゲームなど、使う人の目的を果たすために OS の上で動くソフトウェアのことです。OS はパソコンやスマホそのものを動かす土台で、アプリはその上で「やりたいこと」を担当します。

この記事でわかること

  • アプリ・ソフトウェア・プログラム・OSの違いと種類
  • ネイティブ・Web・ハイブリッド・PWAの違いと選び方
  • 実行ファイル・プロセス・インストールの中身を実物で

2026年10月29日更新|Ubuntu 24.04・Python 3.13・Chromium 153で実行確認

アプリケーションは、使う人とコンピューターの間に立つ「道具」です。使う人がアプリを操作し、アプリが OS に頼み、OS がハードウェア(CPU・メモリ・画面・ネットワーク)を動かします。この順番を押さえると、ソフトウェア・OS・Web アプリとの違いが一度に整理できます。

flowchart TD
    U[使う人] --> A[アプリケーション<br>ブラウザ・表計算・ゲーム]
    A -->|システムコールで頼む| O[OS<br>Windows・macOS・Linux・Android・iOS]
    O --> H[ハードウェア<br>CPU・メモリ・画面・通信]
    W[Webアプリ<br>サーバー側で動く] -.->|HTTPで画面を返す| A

よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
アプリケーションとは 目的の作業をするために OS の上で動くソフトウェア アプリケーションとは(意味と語源)
アプリとアプリケーションの違い 意味は同じ。アプリは略した呼び方 アプリケーションとは(意味と語源)
ソフトウェアとアプリの違い ソフトウェアの中に、OS とアプリケーションがある ソフトウェア・プログラムとの違い
OSとアプリの違い OS は土台。アプリは OS に頼んで動く OSとアプリケーションの違い
アプリの種類 デスクトップ・モバイル・Web・クラウドなど アプリケーションの種類と具体例
Webアプリとの違い Web アプリはサーバーで動き、ブラウザで使う ネイティブ・Web・ハイブリッド・PWAの違い
インストールとは 実行ファイルなどを決まった場所に置き、記録を残すこと インストールとは何をしているのか
.exe・.app・.apk とは それぞれ Windows・Mac・Android のアプリの形 拡張子 .exe・.app・.apk の違い

確認環境:Ubuntu 24.04.5 LTS(Linux カーネル 6.18)の上で、C 言語の小さなアプリを gcc 13.3.0 でコンパイルし、file 5.45・readelf・ldd(glibc 2.39)で実行ファイルとライブラリを、strace 6.8 でシステムコールを確かめました。同じ「文字数を数える」機能を Python 3.13.18 の CLI アプリと Web アプリ(127.0.0.1 の自分のポートだけで起動)で作り、curl 8.5.0 と Chromium 153.0.8010.12(Playwright 1.63.0 から操作)で動かして、時間・メモリ・プロセス数を測りました。インストールの中身は、apt 2.8.3 の apt-get download で取得した hello 2.10-3build1 の .deb を dpkg 1.22.6 で開いて確かめています(apt install はしていません。依存の数は apt-get -s の試行表示で確認)。.exe・.app・.apk・PWA については Microsoft Learn・Apple Developer・Android Developers・MDN の公式ドキュメントで確かめた範囲だけを書いています。図は mermaid 11.16.0 で描画を確かめました(確認日 2026年10月29日)。

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

(記載例)出典:株式会社RJC「アプリケーションとは?OS・ソフトウェアとの違いと種類を中身から解説」

アプリケーションとは(意味と語源)

この節では、アプリケーションという言葉の意味と、「アプリ」との呼び方の違いが分かります。

アプリケーション(application)とは、使う人の目的に合わせた作業をするソフトウェアです。正式には「アプリケーションソフトウェア」と呼び、略して「アプリケーション」「アプリ」「app」と言います。文書を書く、表で計算する、写真を加工する、メッセージを送る、ゲームで遊ぶ、Web ページを見る。こうした「やりたいこと」ごとに、別々のアプリがあります。

英語の application には「適用・応用」「申し込み(申請書)」という意味があります。コンピューターの世界では「コンピューターの力を、ある目的に応用したもの」という意味で使われ、そこから目的別のソフトウェアを指す言葉になりました。英語で「求人に応募する書類」も application なので、IT 以外の文脈では意味が違うことがあります。

アプリとアプリケーションの違い

「アプリ」と「アプリケーション」は同じものを指します。違うのは呼び方の慣れだけです。スマートフォンが広まってから、スマホに入れるものを「アプリ」、パソコンのものを「ソフト」「アプリケーション」と呼ぶ人が増えました。ただし Microsoft のサポートページでも、Windows で入れたものは「スタート」→「設定」→「アプリ」→「インストール済みアプリ」に並ぶと案内されています。OS を作る会社自身が、パソコンのものもアプリと呼んでいます。

仕事の会話で「アプリを作る」と言われたときは、スマホ向けか、Web で使うものか、パソコンに入れるものかで作り方がまったく変わります。話の最初に「どこで動くアプリか」を確かめておくと、すれ違いが起きにくくなります。

アプリケーションは「機能」の集まり

1つのアプリは、たくさんの「機能」でできています。たとえばメッセージアプリなら「送る」「読む」「写真を付ける」「通知する」がそれぞれ機能で、どの機能も中ではプログラム(コンピューターへの命令の並び)が動いています。プログラムを組み合わせて、使う人が目的を果たせる形にまとめたものがアプリケーションです。

ソフトウェア・プログラムとの違い

この節では、ソフトウェア・アプリケーション・プログラムがどう重なっているのかが分かります。

大きい順に「ソフトウェア > アプリケーション > プログラム」と考えると整理できます。ソフトウェアは、コンピューターで動くもの全体の呼び名です。目に見えて手で触れる機器(ハードウェア)の反対の言葉です。

言葉 意味 例
ハードウェア 形のある機器 CPU・メモリ・ディスク・キーボード・画面・プリンター
ソフトウェア コンピューターで動くものすべて OS・アプリケーション・ドライバー・ファームウェア
システムソフトウェア コンピューターそのものを動かすソフトウェア OS・デバイスドライバー・ファームウェア
アプリケーションソフトウェア 使う人の目的のためのソフトウェア ブラウザ・表計算・メール・ゲーム
プログラム コンピューターへの命令を並べたもの 1つのアプリの中に、たくさんのプログラムがある
ミドルウェア OS とアプリの間で共通の働きをするもの データベース・Web サーバー

ファームウェアは、機器の中に書き込まれて機器そのものを動かすソフトウェアです。ルーターやプリンターの「ファームウェア更新」がこれにあたります。

「プログラム」と「アプリケーション」の境目は、使う人から見て目的を果たせる形になっているかどうかです。ファイルの名前を1つ変えるだけの命令もプログラムですが、それだけでアプリとは呼びにくく、画面や操作がまとまり、使う人が「これで○○ができる」と言えるものがアプリケーションです。ただし日常会話では、「プログラムを起動する」と言ってアプリを指すことも多く、言葉の境界は厳密ではありません。

「ソフト」と「アプリ」は別物という思い込み

誤解パソコン用はソフト、スマホ用はアプリで、仕組みが違う
→
実際どちらもアプリケーションソフトウェア。動く OS が違うだけ

Windows の「設定」でも、入れたソフトは「インストール済みアプリ」として並ぶ

OS もアプリの1つという思い込み

誤解Windows も「大きなアプリ」
→
実際OS はシステムソフトウェア。アプリを動かす側

OS に「付いてくるアプリ」(メモ帳・電卓など)は、OS とは別のアプリケーション

アプリは「入れるもの」という思い込み

誤解インストールしないものはアプリではない
→
実際ブラウザで使う Web アプリも、アプリケーション

Gmail やオンラインの表計算は、インストールせずに使うアプリ

OSとアプリケーションの違い(システムソフトウェアとの比較)

この節では、OS とアプリケーションの役割の違いと、アプリが OS に頼んで動く様子を実物で確かめられます。

OS は、ハードウェアを管理して、アプリが動ける場所を用意する土台です。アプリは自分で直接ハードウェアを触らず、OS に「画面に出して」「ファイルを読んで」と頼みます。この頼みごとをシステムコールと言います。

OS(システムソフトウェア)

電源を入れてから切るまで動き続ける

CPU・メモリ・ファイル・通信を管理する

それだけで役に立つ作業はほとんどしない

例:Windows・macOS・Linux・Android・iOS

アプリケーション

使う人が起動し、閉じると終わる

目的の作業(文書・計算・通信)をする

OS が無いと動かない

例:ブラウザ・Word・LINE・ゲーム

実際に、文字列のバイト数を数えるだけの小さなアプリ(C 言語で 7 行)を作り、strace というツールで、このアプリが OS に何を頼んだかを記録しました。

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
    if (argc < 2) { fprintf(stderr, "使い方: count 文字列\n"); return 2; }
    printf("%zu バイト\n", strlen(argv[1]));
    return 0;
}
$ gcc -O2 -o count count.c
$ ./count アプリ
9 バイト
$ strace -f -e trace=execve,openat,write,exit_group ./count アプリ
execve("./count", ["./count", "\343\202\242\343\203\227\343\203\252"], 0x7ffe2becbe20 /* 230 vars */) = 0
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
write(1, "9 \343\203\220\343\202\244\343\203\210\n", 129 バイト
) = 12
exit_group(0)                           = ?
+++ exited with 0 +++

読み方は次のとおりです。execve は「このファイルをアプリとして起動して」、openat は「このファイルを開いて」、write(1, …) は「画面(標準出力)にこの 12 バイトを書いて」、exit_group(0) は「正常に終わります」という OS への頼みです。画面に文字を出すという単純なことも、アプリは自分では行わず、OS に任せています。

回数も数えました。strace -c の集計では、7 行のアプリでも起動から終了までに 18 種類・34 回のシステムコールを使っていました(mmap 8 回・mprotect 3 回・fstat 3 回・brk 3 回 など。多くはメモリの用意とライブラリの読み込みです)。

$ strace -c ./count アプリ
% time     seconds  usecs/call     calls    errors syscall
 22.55    0.000085          10         8           mmap
 13.00    0.000049          24         2           openat
  9.81    0.000037          12         3           mprotect
(中略)
  0.00    0.000000           0         1           execve
------ ----------- ----------- --------- --------- ----------------
100.00    0.000377          11        34         1 total

この「アプリは OS に頼む」という関係があるので、Windows 用のアプリは macOS では動かず、iPhone のアプリは Android では動きません。頼み方(システムコールや API)が OS ごとに違うからです。

アプリケーションの種類と具体例

この節では、アプリケーションを「どこで動くか」と「何に使うか」で分けたときの種類と、身近な具体例が分かります。

動く場所で分けると、デスクトップアプリ・モバイルアプリ・Web アプリ・クラウドのアプリの4つが基本です。

1デスクトップアプリ

パソコン(Windows・macOS・Linux)に入れて使う。Word・Excel・Photoshop・VS Code など。多くは通信が無くても動き、重い処理が得意。

2モバイルアプリ

スマホやタブレット(iOS・Android)に入れて使う。App Store や Google Play から入れる。カメラ・位置情報・通知と組み合わせやすい。

3Webアプリ

サーバーで動き、ブラウザから使う。Gmail・オンラインの表計算・ネットショップなど。入れずに使え、どの端末でも同じ画面が出る。

4クラウドのアプリ(SaaS)

インターネットの向こうでサービスとして提供される。データも向こうに保存され、複数の端末や人で共有できる。Web アプリの形で使うことが多い。

このほか、画面を持たずに文字で操作する CLI アプリ(コマンドラインのアプリ)、裏で動き続ける 常駐アプリ・サービス(ウイルス対策・同期ツール)、家電や車の中で動く 組み込みのアプリもあります。

用途で分けた種類と具体例

用途 代表的なアプリ 主な形
文書・表計算・発表資料 Word・Excel・PowerPoint・Google ドキュメント デスクトップ・Web
テキストエディタ メモ帳・VS Code・vim デスクトップ・CLI
Web 閲覧(ブラウザ) Chrome・Edge・Safari・Firefox デスクトップ・モバイル
メール・チャット Outlook・Gmail・Slack・LINE・Teams 全部の形がある
画像・動画の編集 Photoshop・Premiere・GIMP 主にデスクトップ
ゲーム スマホ・PC・家庭用ゲーム機のゲーム モバイル・デスクトップ・専用機
業務用 会計・顧客管理(CRM)・勤怠・在庫管理 Web(SaaS)が増えている

業務用のアプリは、会社ごとに作る「個別開発」と、決まった機能を契約して使う「パッケージ・SaaS」に分かれます。ブラウザ自身もアプリケーションの1つで、Web アプリを動かすための土台の役目も持っています。

ネイティブアプリ・Webアプリ・ハイブリッドアプリ・PWAの違い

この節では、作り方で分けたときの4種類(ネイティブ・Web・ハイブリッド・PWA)の違いと、それぞれの得意なことが分かります。

ネイティブアプリは「その OS のために作り、その OS に入れる」アプリ、Web アプリは「サーバーで動き、ブラウザで使う」アプリです。ハイブリッドアプリと PWA は、その中間にあたります。

種類 どこで動くか 入れ方・更新 得意なこと 苦手なこと
ネイティブアプリ 端末の OS の上 ストアや配布ファイルから入れる。更新も端末ごと 速さ・カメラ等の機能・通信なしでの動作 OS ごとに作る手間
Webアプリ サーバー(画面はブラウザ) 入れずに URL を開く。更新はサーバー側だけ どの端末でも同じ・配布が楽 通信が無いと使えないことが多い
ハイブリッドアプリ 端末の OS の上(中身は Web の技術など) ネイティブと同じく入れる 1つの作りで複数の OS に出せる OS 独自の機能は追加の作業が要る
PWA ブラウザ(端末にインストールもできる) Web として公開し、ブラウザから入れる Web のまま、アプリのように起動できる ブラウザや OS で対応に差がある

ハイブリッドアプリの作り方には、Web の画面を端末のアプリの中に入れる方法や、1つのコードから各 OS 向けのアプリを作る仕組み(Flutter・React Native など)があります。Flutter については関連記事「Flutterとは|始め方・インストールとDartの基本を図と実例で解説」で扱っています。パソコン向けでは Electron が知られています。Electron の公式ドキュメントには「Chromium と Node.js を実行ファイルに組み込むことで、1つの JavaScript のコードで Windows・macOS・Linux で動くアプリを作れる」と書かれています。

PWA(プログレッシブウェブアプリ)とは

MDN は PWA を「ウェブプラットフォーム技術を使用して構築されたアプリですが、プラットフォーム専用のアプリのような使い勝手を提供します」と説明しています。MDN の「PWA をインストール可能にする」によると、Chromium 系のブラウザ(Chrome・Edge など)でインストールできるようにするには、次の条件があります。

  • Web アプリマニフェスト(manifest.json)を <link rel="manifest"> で読み込み、name か short_name、192px と 512px のアイコン、start_url、display を書く。
  • https で公開する(開発中は localhost や 127.0.0.1 でもよい)。
  • サービスワーカーは、インストールの必須条件ではない(オフラインで動かすために使うことが多い)。

MDN には、Firefox と Safari(デスクトップ)はマニフェストを使ったインストールに対応していないとも書かれています。作り方は関連記事「PWAの作り方|Service Worker最小コードとキャッシュ戦略一覧」で扱っています。

アプリが動く仕組み:実行ファイル・プロセス・ライブラリを見る

この節では、アプリの正体である「実行ファイル」と、起動したアプリの姿である「プロセス」、アプリが借りて使う「ライブラリ」を、Linux で実際に確かめた結果が分かります。

1

実行ファイルがディスクにある

アプリの本体は、CPU が読める命令(機械語)が入ったファイル。Linux では ELF、Windows では PE という形式。

起動前

2

OS がメモリに読み込む

起動すると、OS が実行ファイルをメモリに読み込み、番号(PID)を付けて「プロセス」として動かす。

起動

3

ライブラリをつなぐ

多くのアプリは、共通の部品(共有ライブラリ)を借りて動く。足りないと起動できない。

起動の直後

4

OS に頼みながら動く

画面表示・ファイル・通信は、システムコールで OS に頼む。

実行中

5

終わるとプロセスが消える

アプリを閉じるとプロセスが終わり、使っていたメモリは OS に返される。実行ファイルはディスクに残る。

終了

実行ファイルの中身(先頭の4バイト)

さきほどの count を file と od・readelf で調べました。先頭の4バイトは 7f 45 4c 46(「.ELF」)で、OS はこの印を見て「Linux の実行ファイルだ」と判断します。

$ ls -l count
-rwxr-xr-x 1 root root 16096 Oct 30 15:15 count
$ file count
count: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=1e7fedee27eaaa55c2ba88a89a4cdc793c063543, for GNU/Linux 3.2.0, not stripped
$ head -c 16 count | od -A x -t x1z
000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  >.ELF............<
$ readelf -h count | head -12
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Position-Independent Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x1100

16,096 バイトのファイルの中に、「64ビット」「x86-64 の CPU 用」「最初に実行する場所(Entry point)」が書かれています。CPU の種類(x86-64・ARM など)が違う端末では、同じファイルは動きません。

ライブラリ(借りて使う部品)を ldd で見る

アプリは、すべてを自分で持っているわけではありません。文字を表示する・通信するといった共通の処理は、共有ライブラリ(Linux では .so、Windows では .dll)を借りて使います。ldd で、どのライブラリを借りているかが分かります。

$ ldd count
	linux-vdso.so.1 (0x00007f2c88a47000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2c88800000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f2c88a49000)
$ ldd /usr/bin/curl | wc -l
33
$ ldd /usr/bin/curl | head -4
	linux-vdso.so.1 (0x00007fb3695ee000)
	libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4 (0x00007fb3694ce000)
	libz.so.1 => /usr/local/lib/libz.so.1 (0x00007fb3694a2000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb369200000)

7 行の count が借りているのは C の標準ライブラリ(libc)だけですが、通信のアプリ curl は 33 行ぶんのライブラリ(暗号化・圧縮・HTTP/2 など)を借りていました。Linux の公式マニュアル(ld.so(8))は、起動時に「プログラムが必要とする共有ライブラリを見つけて読み込み、実行の準備をする」のが ld.so の役割だと説明しています。

起動中のアプリ=プロセスを ps と /proc で見る

次の節で作る Web アプリ(Python 製)を 127.0.0.1 のポート 18995 で起動し、動いている姿を見ました。

$ ps -o pid,ppid,stat,rss,cmd -p 1237
  PID  PPID STAT   RSS CMD
 1237     1 S    18448 python3 mojiweb.py 18995
$ ls -l /proc/1237/exe
lrwxrwxrwx 1 root root 0 Oct 30 15:15 /proc/1237/exe -> /usr/local/bin/python3.13
$ ls -l /proc/1237/fd
0 -> /dev/null
1 -> /home/you/apps/web.log
2 -> /home/you/apps/web.log
3 -> socket:[18641]
$ grep -E 'VmRSS|Threads' /proc/1237/status
VmRSS:	   18448 kB
Threads:	1

ここから分かることは3つあります。

  • プロセスには番号(PID 1237)が付き、約 18MB のメモリ(RSS)を使っている。タスクマネージャー(Windows)やアクティビティモニタ(Mac)に並ぶのも、このプロセスです。
  • Python で書いたアプリの実体は python3.13 という別のアプリ(インタプリタ)で、mojiweb.py はそれに読ませる台本(スクリプト)です。/proc/1237/exe がそれを示しています。
  • 開いているもの(fd)は、ログのファイルと通信の出入口(socket)。アプリが使うファイルや通信も、OS が番号で管理しています。

プロセスの調べ方と止め方は、関連記事「Linuxプロセス確認と停止|ps・top・kill逆引きコマンド一覧」で詳しく扱っています。

同じ機能をCLIアプリとWebアプリで作って比べた結果

この節では、同じ「文字数を数える」機能を、コマンドで使う CLI アプリと、ブラウザで使う Web アプリで作り、動かして比べた結果が分かります。

同じ機能でも、Web アプリにすると「サーバー」と「ブラウザ」という2つのアプリが関わり、コード量もメモリも増えます。その代わり、どの端末からでも URL を開くだけで使えます。

CLI アプリ(6 行)

import argparse, sys
p = argparse.ArgumentParser(prog="mojicli", description="文字数とバイト数を数えるCLIアプリ")
p.add_argument("text", help="数える文字列")
a = p.parse_args()
t = a.text
print(f"文字数: {len(t)}  UTF-8のバイト数: {len(t.encode())}")
$ python3 mojicli.py アプリケーション
文字数: 8  UTF-8のバイト数: 24
$ python3 mojicli.py
usage: mojicli [-h] text
mojicli: error: the following arguments are required: text
$ echo $?
2

Web アプリ(14 行・127.0.0.1 だけで待ち受け)

import html, sys
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs
PAGE = """<!doctype html><html lang="ja"><meta charset="utf-8"><title>文字数カウント</title>
<form action="/count"><input name="text" value="{v}"><button>数える</button></form><p id="r">{r}</p></html>"""
class H(BaseHTTPRequestHandler):
    def do_GET(self):
        u = urlparse(self.path)
        t = parse_qs(u.query).get("text", [""])[0]
        r = f"文字数: {len(t)}  UTF-8のバイト数: {len(t.encode())}" if u.path == "/count" else ""
        body = PAGE.format(v=html.escape(t), r=r).encode()
        self.send_response(200); self.send_header("Content-Type", "text/html; charset=utf-8")
        self.send_header("Content-Length", str(len(body))); self.end_headers(); self.wfile.write(body)
HTTPServer(("127.0.0.1", int(sys.argv[1])), H).serve_forever()

curl で中身を見ると、Web アプリは「HTML という画面の設計図」を返しているだけで、画面を描くのはブラウザの仕事だと分かります。

$ curl -v "http://127.0.0.1:18995/count?text=%E3%82%A2%E3%83%97%E3%83%AA"
* Connected to 127.0.0.1 (127.0.0.1) port 18995
> GET /count?text=%E3%82%A2%E3%83%97%E3%83%AA HTTP/1.1
> Host: 127.0.0.1:18995
> User-Agent: curl/8.5.0
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: BaseHTTP/0.6 Python/3.13.18
< Content-Type: text/html; charset=utf-8
< Content-Length: 240
<
<!doctype html><html lang="ja"><meta charset="utf-8"><title>文字数カウント</title>
<form action="/count"><input name="text" value="アプリ"><button>数える</button></form><p id="r">文字数: 3  UTF-8のバイト数: 9</p></html>

Chromium(Playwright から操作)で開き、入力欄に「アプリケーション」と入れてボタンを押しました。

ブラウザ版: 153.0.8010.12
結果: 文字数: 8 UTF-8のバイト数: 24 | URL: http://127.0.0.1:18995/count?text=%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3
ブラウザ起動 0.44秒 / ボタン→結果表示 144ms
リクエスト: ['http://127.0.0.1:18995/', 'http://127.0.0.1:18995/count?text=...']
Chromiumのプロセス数: 11
{'chrome': 1, 'chrome_crashpad_handler': 2, 'zygote': 2, 'gpu-process': 1, 'utility:NetworkService': 1, 'utility:StorageService': 1, 'renderer': 3}
27msCLI アプリの起動〜結果Python の起動を含む・最大 RSS 13,780KB
144msWeb アプリのボタン〜結果表示ブラウザ起動済み・127.0.0.1 の通信
11個ブラウザ1つのプロセス数タブ1枚でも描画・通信・GPU で分かれる
比べた点 CLI アプリ Web アプリ
コードの行数 6 行 14 行(HTML の画面を含む)
動くアプリ python3 が1つ サーバー(python3)+ブラウザ(Chromium 11 プロセス)
メモリ(RSS) 最大 13,780KB サーバー 18,448KB。Chromium は RSS の単純合計で 872〜904MB(共有分を重ねて数えるため実際より大きい)
使い方 コマンドを打つ。ほかのコマンドとつなげやすい URL を開いて入力・クリック。操作に慣れが要らない
使える人 そのパソコンに入れた人 サーバーに届く人なら、どの端末からでも

ブラウザが 11 個のプロセスに分かれているのは、タブの描画(renderer)・通信(NetworkService)・画面の描画(gpu-process)を分け、1つが止まっても全体が落ちにくくするためです。「ブラウザは重い」と言われる理由の1つが、この数字に表れています。

最後に、サーバーのプロセスを自分の PID で止めると、Web アプリは使えなくなりました。

$ kill 1237
$ curl "http://127.0.0.1:18995/"
curl: (7) Failed to connect to 127.0.0.1 port 18995 after 0 ms: Couldn't connect to server

Web アプリは、サーバーのプロセスが動いている間だけ使えます。ブラウザ側に何も入れていないので、サーバーのプログラムを書き換えれば、次に開いた人から新しい版になります。これが「Web アプリは更新がサーバー側だけで済む」という意味です。

インストールとは何をしているのか(.debの中身を見る)

この節では、アプリを「インストールする」ときに裏で何が起きているかを、Linux のアプリの配布ファイル(.deb)を開いて確かめた結果が分かります。

インストールとは、アプリの実行ファイルや部品を決まった場所に置き、「何をどこに置いたか」を OS に記録することです。必要なライブラリが足りなければ、それも一緒に入れます。

Ubuntu のアプリは .deb という形で配られます。あいさつを表示するだけの見本アプリ GNU hello の .deb を、apt-get download で取得だけしました(インストールはしていません)。

$ apt-get download hello
Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 hello amd64 2.10-3build1 [26.0 kB]
$ file hello_2.10-3build1_amd64.deb
hello_2.10-3build1_amd64.deb: Debian binary package (format 2.0), with control.tar.zst, data compression zst
$ ar t hello_2.10-3build1_amd64.deb
debian-binary
control.tar.zst
data.tar.zst

26,006 バイトの .deb の中は3つに分かれていました。Ubuntu の公式マニュアル deb(5) にも「1番目は debian-binary、2番目は control.tar、3番目は data.tar で、この順番でなければならない」とあります。

control:アプリの説明書(依存するライブラリ)

$ dpkg -I hello_2.10-3build1_amd64.deb
 Package: hello
 Version: 2.10-3build1
 Architecture: amd64
 Installed-Size: 104
 Depends: libc6 (>= 2.38)
 Conflicts: hello-traditional
 Section: devel
 Homepage: https://www.gnu.org/software/hello/
 Description: example package based on GNU hello
(以下略)

Depends: libc6 (>= 2.38) が「このアプリは版 2.38 以上の C ライブラリが無いと動かない」という宣言です。Architecture: amd64 は「x86-64 の CPU 用」という意味で、さきほど readelf で見た CPU の種類と対応しています。

data:実際に置かれるファイル

$ dpkg -c hello_2.10-3build1_amd64.deb
drwxr-xr-x root/root         0 2024-04-09 00:58 ./
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/bin/
-rwxr-xr-x root/root     26856 2024-04-09 00:58 ./usr/bin/hello
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/share/
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/share/doc/
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/share/doc/hello/
-rw-r--r-- root/root      1868 2014-11-16 20:51 ./usr/share/doc/hello/NEWS.gz
-rw-r--r-- root/root       891 2024-04-09 00:58 ./usr/share/doc/hello/changelog.Debian.gz
-rw-r--r-- root/root      2264 2022-12-27 00:30 ./usr/share/doc/hello/copyright
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/share/info/
-rw-r--r-- root/root     11668 2024-04-09 00:58 ./usr/share/info/hello.info.gz
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/share/man/
drwxr-xr-x root/root         0 2024-04-09 00:58 ./usr/share/man/man1/
-rw-r--r-- root/root       790 2024-04-09 00:58 ./usr/share/man/man1/hello.1.gz

アプリ本体は /usr/bin/hello(26,856 バイト)の1つだけで、あとは説明書(man・info)・変更履歴・ライセンス(copyright)でした。インストールすると、これらが /usr/bin などに置かれ、/usr/bin は PATH(コマンドを探す場所)に入っているので、どこからでも hello と打てば起動できるようになります。

インストールせずに、作業用のフォルダへ展開しただけでも動かせました。

$ dpkg-deb -x hello_2.10-3build1_amd64.deb x
$ ./x/usr/bin/hello
Hello, world!
$ command -v hello || echo "hello はPATHに無い(インストールしていない)"
hello はPATHに無い(インストールしていない)

つまり「アプリが動く」ことと「インストールされている」ことは別です。インストールの価値は、決まった場所に置いて誰でも呼び出せるようにすること、依存するライブラリをそろえること、あとで消せるように記録を残すことにあります。

OS が残す「何を入れたか」の記録

すでに入っている curl で、OS 側の記録を見ました。

$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl
$ wc -l /var/lib/dpkg/info/curl.list
16 /var/lib/dpkg/info/curl.list

curl というアプリが置いた 16 項目の一覧が残っていて、アンインストールのときはこの一覧をもとに消します。Windows の「設定」→「アプリ」に並ぶ一覧や、Mac でアプリを消す操作も、目的は同じ「入れたものを把握して消せるようにする」ことです。

依存するアプリが多いと、一度にたくさん入る

apt-get -s(試行だけで何も変えない)で、入れたときに何が入るかを表示しました。

$ apt-get -s install hello
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Inst hello (2.10-3build1 Ubuntu:24.04/noble [amd64])
Conf hello (2.10-3build1 Ubuntu:24.04/noble [amd64])
$ apt-get -s install gimp
0 upgraded, 35 newly installed, 0 to remove and 0 not upgraded.

hello は1つで済みますが、画像編集アプリ GIMP は、この環境では部品を含めて 35 個のパッケージが新しく入る計算でした。大きなアプリほど、借りる部品も多くなります。apt の使い方は関連記事「aptコマンド一覧|updateとupgradeの違い・apt-getとの違い」で扱っています。

拡張子 .exe・.app・.apk の違い(Windows・Mac・Android)

この節では、OS ごとのアプリのファイルの形と、Windows のアプリが Linux や Mac でそのまま動かない理由が分かります。各 OS の形式は公式ドキュメントで確かめた範囲で書いています。

拡張子 OS 中身(公式ドキュメントの説明)
.exe(.dll) Windows PE(Portable Executable)形式の実行ファイル。先頭に MS-DOS スタブがあり、その後に「PE\0\0」という印がある(Microsoft Learn「PE Format」)
.msi・.msix Windows インストール用のパッケージ。中にアプリと設定が入る
.app macOS・iOS 1つのファイルではなくフォルダ(バンドル)。Contents の中に実行ファイル(MacOS)・資源(Resources)・Info.plist がある(Apple「Bundle Structures」)
.dmg・.pkg macOS .app を配るための入れ物(ディスクイメージ・インストーラー)
.apk Android 実行に必要な中身をまとめた圧縮ファイルで、端末はこれを使ってインストールする(Android Developers)
.aab Android 公開用の形式で、端末には直接インストールできない(Android Developers)
.deb・.rpm Linux パッケージ。中の実行ファイルは ELF 形式

Apple の「Bundle Structures」には、Finder はほとんどのバンドルを中身の見えないもの(1つのまとまり)として扱うと書かれています。Mac で .app が1つのファイルに見えるのはこのためで、実際はフォルダです。

Android Developers の「Application fundamentals」には、Android は複数ユーザーの Linux システムで、アプリごとに別のユーザー ID が割り当てられ、標準では各アプリが自分のプロセスで動くと書かれています。アプリどうしが互いのデータを勝手に読めないのは、この仕組みのためです。

Windows の .exe を Linux で起動するとどうなるか

PE 形式と同じく「MZ」で始まるだけの小さなファイルを作り、Linux で起動しようとしました(中身は空で、Windows のアプリではありません)。

$ file fake.exe
fake.exe: MS-DOS executable, MZ for MS-DOS
$ ./fake.exe
/bin/bash: line 26: ./fake.exe: cannot execute binary file: Exec format error

OS は先頭の印でファイルの形式を判断し、自分の形式でなければ起動しません。拡張子を .exe から別の名前に変えても中身は変わらないので、動くようにはなりません。Windows のアプリを別の OS で使うには、その OS 向けの版を入れるか、仮想マシンなどで Windows を動かす必要があります。

アプリが起動しない・エラーになるときの原文と意味

この節では、アプリを起動したときによく出るエラーの原文と、その意味・直し方が分かります。すべてこの環境で実際に起こしたものです。

表示された原文 終了コード 意味 直し方
countx: command not found 127 その名前のアプリが PATH の中に無い 名前の打ち間違いを直す・インストールする・PATH を通す
./nothing: No such file or directory 127 指定した場所にファイルが無い 今いるフォルダとファイル名を確かめる
./count_noexec: Permission denied 126 ファイルはあるが、実行の許可が無い chmod +x で実行の許可を付ける
cannot execute binary file: Exec format error 126 別の OS・別の CPU 用のファイル 自分の OS と CPU に合う版を入れる
error while loading shared libraries: libgreet.so: cannot open shared object file: No such file or directory 127 アプリが借りるライブラリが見つからない 足りないライブラリを入れる(パッケージで入れ直す)
conversion to a multibyte string failed: Invalid or incomplete multibyte or wide character — 日本語を扱う設定(ロケール)が無い LANG=C.UTF-8 などで UTF-8 のロケールを指定する
curl: (7) Failed to connect to 127.0.0.1 port 18995 after 0 ms: Couldn't connect to server 7 Web アプリのサーバーが動いていない サーバーのプロセスを起動する・ポート番号を確かめる

bash の公式マニュアルには「コマンドが見つからないとき終了ステータスは 127、見つかったが実行できないとき 126」と書かれています。ライブラリ不足の 127 は、自分で作った部品(libgreet.so)をわざと見えない場所に置いて起こしました。ldd で見ると、足りない部品が not found と表示されます。

$ ./app2
./app2: error while loading shared libraries: libgreet.so: cannot open shared object file: No such file or directory
$ ldd app2 | grep greet
	libgreet.so => not found
$ LD_LIBRARY_PATH=lib ./app2
こんにちは

ロケールのエラーは、hello に日本語のあいさつを表示させたときに出ました。言語の設定(LANG)が空の状態では日本語を扱えず、LANG=C.UTF-8 を付けると表示できました。

$ ./x/usr/bin/hello -g "アプリが動きました"
./x/usr/bin/hello: conversion to a multibyte string failed: Invalid or incomplete multibyte or wide character
$ LANG=C.UTF-8 ./x/usr/bin/hello -g "アプリが動きました"
アプリが動きました

command not found の詳しい直し方は関連記事「command not foundの直し方|PATHの確認方法と原因別の対処表」で扱っています。

原因を探すときは、次の順で確かめると早く絞り込めます。

  1. 1ファイルはあるか(名前と場所)command not found・No such file or directory
  2. 2実行してよい許可があるかPermission denied
  3. 3OS と CPU に合う版かExec format error
  4. 4借りる部品(ライブラリ・ランタイム)はそろっているかshared libraries・○○.dll が見つからない
  5. 5設定や環境(言語・ポート・通信)は合っているかロケール・接続できない

アプリを入れる前の確認と、困ったときの対処

この節では、アプリをダウンロードする前に見ておくことと、動かなくなったときに試す順番が分かります。

  • 1公式のストアか、開発元の公式サイトから入れるかApp Store・Google Play・Microsoft Store・開発元のページ
  • 2料金はかかるか無料でも、アプリ内課金や月額の契約がある場合がある
  • 3自分の OS と版に対応しているかWindows 11・macOS・iOS・Android の版、CPU の種類
  • 4容量と通信量は足りるかストアの表示サイズ。依存する部品でさらに増えることがある
  • 5求められる権限は目的に合っているか電卓アプリが連絡先を求めるなど、目的と合わない権限に注意
  • 6会社のパソコンなら、入れてよいか情報システム部門の決まりに従う

動かない・固まったときに試す順番

  1. アプリを閉じて開き直す。プロセスが終わり、メモリが片付いた状態から始め直せます。
  2. 端末を再起動する。裏で残っているプロセスや、OS 側の一時的な不具合が片付きます。
  3. アプリと OS を最新の版にする。不具合の修正が入っていることがあります。
  4. 空き容量と通信を確かめる。保存先が一杯、通信が切れている、で動かないことがあります。
  5. アプリのキャッシュやデータを消す・入れ直す。データが消える場合があるので、先にバックアップします。
  6. 開発元のサポートに問い合わせる。表示されたエラーの文言と、OS・アプリの版を伝えると話が早く進みます。

Mac でアプリが固まったときは、Apple サポートの「Macでアプリを強制的に終了する方法」にあるとおり、option・command・esc の3つのキーを同時に押して開く画面から強制終了できます。これも「プロセスを止める」操作です。Windows でアプリを消すときは、Microsoft サポートの案内どおり「設定」→「アプリ」→「インストール済みアプリ」から選びます(設定から消せないアプリはコントロール パネルの手順)。

どの種類のアプリを選ぶか・作るかの判断表

この節では、アプリを使う側・作る側それぞれで、どの種類を選ぶとよいかの目安が分かります。

こうしたい 向いている種類 理由
通信が無い場所でも使いたい ネイティブ(デスクトップ・モバイル) 端末の中だけで動く
どの端末からでも同じデータで使いたい Web アプリ・SaaS データがサーバーにある
カメラ・位置情報・通知を深く使う ネイティブ(モバイル) OS の機能を直接呼べる
動画編集など重い処理をする デスクトップアプリ CPU・GPU・メモリを使い切れる
配布や更新の手間を減らしたい(作る側) Web アプリ・PWA サーバーを更新すれば全員が新しい版になる
iPhone と Android の両方に少ない手間で出したい(作る側) ハイブリッド(Flutter・React Native など) 1つのコードから両方を作れる
決まった作業を繰り返し自動で行いたい CLI アプリ・スクリプト ほかのコマンドとつなげ、毎回同じ手順で動かせる
社内の業務を早く始めたい 既製の SaaS を先に試す 作らずに使え、合わなければ作ることを考える

作る側では、アプリの中を「画面(UI)」「処理の決まり(業務のロジック)」「データ」の3つの層に分けて考えるのが一般的です。Web アプリなら画面はブラウザ、処理とデータはサーバー側にあり、ネイティブアプリならすべてが端末の中にある、という違いになります。

1

画面(UI)

使う人が見て触る部分。ボタン・入力欄・一覧。

Web ではブラウザが描く

2

処理(ロジック)

計算・判定・手順。「文字数を数える」もここ。

CLI 版と Web 版で同じ

3

データ

保存しておく情報。ファイルやデータベース。

SaaS ではサーバー側

4

土台(OS・ミドルウェア)

上の3つを動かす場所。OS・Web サーバー・データベース。

アプリはここに頼む

さきほどの比べ方でいうと、「文字数を数える」処理は CLI 版と Web 版でまったく同じ1行で、違うのは画面の部分だけでした。処理を画面から分けて書いておくと、同じ処理を CLI・Web・スマホのどこからでも使い回せます。

アプリケーションのよくある誤解

この節では、初めて学ぶ人がつまずきやすいアプリケーションの誤解と、実際のところが分かります。

アプリを閉じれば何も残らない

誤解画面を閉じたらアプリは完全に止まる
→
実際常駐する部分や、通知のためのプロセスが残るアプリもある

ps やタスクマネージャーでプロセスが残っていないかを見ると分かる

Web アプリは何もインストールしない

誤解Web アプリはアプリを使わずに動く
→
実際ブラウザというアプリが入っていて、その中で動く

手元の計測では、ブラウザ1つで 11 プロセスが動いていた

拡張子を変えれば別の OS でも動く

誤解.exe を .app に名前を変えれば Mac で動く
→
実際中身の形式が違うので動かない

Linux で MZ のファイルを起動すると Exec format error になった

アプリは1つのファイル

誤解アプリ=実行ファイル1つ
→
実際実行ファイル+ライブラリ+説明書+設定の集まり

hello の .deb には 15 項目、GIMP は 35 パッケージが新しく入る計算だった

よくある質問

Q. アプリケーションとは簡単に言うと何ですか? A. 文書作成・計算・連絡・ゲームなど、使う人がやりたいことをするためのソフトウェアです。パソコンやスマホの土台である OS の上で動きます。

Q. アプリとアプリケーションに違いはありますか? A. 意味は同じで、アプリはアプリケーションを略した呼び方です。スマホのものを「アプリ」、パソコンのものを「ソフト」と呼び分ける人もいますが、仕組みの違いではありません。

Q. ソフトウェアとアプリの違いは何ですか? A. ソフトウェアはコンピューターで動くもの全体の呼び名で、その中に OS などのシステムソフトウェアと、アプリケーションソフトウェアがあります。アプリはソフトウェアの一部です。

Q. OS はアプリケーションですか? A. OS はアプリケーションではなく、システムソフトウェアです。ハードウェアを管理し、アプリが動ける場所を用意します。アプリは OS にシステムコールで頼みながら動きます。

Q. Web アプリとネイティブアプリはどちらがよいですか? A. 目的で決まります。通信なしで使いたい・カメラなど端末の機能を深く使いたいならネイティブ、どの端末でも同じように使いたい・配布の手間を減らしたいなら Web アプリが向いています。

Q. アプリケーションソフトとアプリケーションプログラムは同じですか? A. ほぼ同じ意味で使われます。厳密には、プログラムは命令の並びで、アプリケーションはプログラムを組み合わせて目的を果たせる形にしたものです。

Q. インストールとは何をしているのですか? A. アプリの実行ファイルや部品を決まった場所に置き、必要なライブラリをそろえ、「何をどこに置いたか」を OS に記録しています。この記録があるので、あとでアンインストールできます。

Q. ブラウザはアプリですか? A. はい、ブラウザもアプリケーションです。同時に、Web アプリを動かすための土台でもあります。

Q. Windows のアプリは Mac や Linux で使えますか? A. そのままでは使えません。実行ファイルの形式(Windows は PE、Linux は ELF など)や OS への頼み方が違うためです。その OS 向けの版を入れるか、Web 版があればそちらを使います。

Q. アプリを閉じてもメモリが減らないのはなぜですか? A. 裏で動き続ける部分(常駐・通知用のプロセス)が残っている場合や、OS が次の起動を速くするために一時的にデータを残している場合があります。タスクマネージャーやアクティビティモニタでプロセスを確かめます。

Q. アプリを作るには何から学べばよいですか? A. 作りたいアプリの種類を決めると、学ぶ言語が決まります。Web アプリなら HTML・CSS・JavaScript と、サーバー側の言語(Python・Java など)、スマホなら Swift・Kotlin か Flutter などです。最初は、この記事の文字数カウントのような小さなアプリを動かすところから始めると、仕組みがつかみやすくなります。

まとめ

  • アプリケーション(アプリ)とは、使う人の目的のために OS の上で動くソフトウェア。アプリとアプリケーションは同じ意味。
  • 大きい順に「ソフトウェア > アプリケーション > プログラム」。OS はアプリではなくシステムソフトウェアで、アプリは OS にシステムコールで頼んで動く(7 行のアプリでも 34 回)。
  • 種類は、動く場所でデスクトップ・モバイル・Web・クラウド、作り方でネイティブ・Web・ハイブリッド・PWA。選び方は「通信なしで使うか」「どの端末から使うか」「端末の機能を深く使うか」で決まる。
  • アプリの正体は実行ファイル(Linux は ELF・Windows は PE)で、起動するとプロセスになり、ライブラリを借りて動く。同じ機能でも Web アプリはサーバーとブラウザ(11 プロセス)が関わる。
  • インストールとは、ファイルを決まった場所に置き、依存する部品をそろえ、記録を残すこと。起動できないときは「ファイル・許可・OS と CPU・ライブラリ・設定」の順に確かめる。

次に読むとよい記事です。Linux でアプリ(プロセス)の動きを見るなら関連記事「Linuxプロセス確認と停止|ps・top・kill逆引きコマンド一覧」、Web の技術でアプリを作るなら関連記事「PWAの作り方|Service Worker最小コードとキャッシュ戦略一覧」が参考になります。

参考・出典

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

  • Microsoft Learn「PE Format」:https://learn.microsoft.com/en-us/windows/win32/debug/pe-format
  • Microsoft Learn「Windows用のデスクトップ アプリを構築する」:https://learn.microsoft.com/ja-jp/windows/apps/desktop/
  • Apple Developer「Bundle Structures」(Bundle Programming Guide):https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html
  • Android Developers「Application fundamentals」:https://developer.android.com/guide/components/fundamentals
  • MDN「プログレッシブウェブアプリ (PWA)」:https://developer.mozilla.org/ja/docs/Web/Progressive_web_apps
  • MDN「PWA をインストール可能にする」:https://developer.mozilla.org/ja/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable
  • Electron「Introduction」:https://www.electronjs.org/docs/latest/
  • Linux man-pages「ld.so(8)」:https://man7.org/linux/man-pages/man8/ld.so.8.html
  • Ubuntu Manpage「deb - Debian binary package format」:https://manpages.ubuntu.com/manpages/noble/man5/deb.5.html
  • GNU Bash Reference Manual「Exit Status」:https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
  • Apple サポート「Macでアプリを強制的に終了する方法」:https://support.apple.com/ja-jp/102586
  • Microsoft サポート「Windows でアプリとプログラムをアンインストールまたは削除する」:https://support.microsoft.com/ja-jp/windows/4b55f974-2cc6-2d2b-d092-5905080eaf98
  • The Linux Kernel documentation「Linux kernel release README」:https://www.kernel.org/doc/html/latest/admin-guide/README.html

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

(記載例)出典:株式会社RJC「アプリケーションとは?OS・ソフトウェアとの違いと種類を中身から解説」

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

WE ARE HIRING

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

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

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

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

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

AI駆動開発、 無料セミナー