開発環境としてテキストエディタもWebブラウザから使えると便利です。
これにはVS Code(Visual Studio Code)をWebブラウザ上で動作させるオープンソースのツール「code-server」がベストでしょう。
Dockerでインストールする
以下をコピペすればインストールされます。
#!/bin/bash
# ============================================================
# Code-Server Docker版 セットアップ + 日本語化
# 対象OS: Ubuntu 25.10
# ============================================================
set -euo pipefail
INSTALL_DIR="/opt/docker/codeserver"
GREEN='\033[0;32m'; CYAN='\033[0;36m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
success() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERR]${NC} $*"; exit 1; }
[[ $EUID -ne 0 ]] && error "root権限で実行してください: sudo bash $0"
if ! docker compose version &>/dev/null; then
error "docker compose が見つかりません。先にインストールしてください。"
fi
success "docker compose 確認済み"
REAL_USER="${SUDO_USER:-$(logname 2>/dev/null || echo $USER)}"
PUID=$(id -u "$REAL_USER" 2>/dev/null || echo 1000)
PGID=$(id -g "$REAL_USER" 2>/dev/null || echo 1000)
# --- パスワード自動生成 ---
info "パスワードを自動生成中..."
PASSWORD=$(openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 32)
HASHED_PASSWORD=$(echo -n "$PASSWORD" | sha256sum | cut -d' ' -f1)
# --- ディレクトリ作成 ---
info "ディレクトリを作成中: $INSTALL_DIR"
mkdir -p "$INSTALL_DIR"/{config,workspace}
# --- ★ 日本語化のキモ: argv.json を事前に配置 ---
info "argv.json (日本語化設定) を配置中..."
ARGV_DIR="$INSTALL_DIR/config/data/User"
mkdir -p "$ARGV_DIR"
cat > "$ARGV_DIR/argv.json" <<'EOF'
{
"locale": "ja"
}
EOF
success "argv.json 配置完了"
# --- .env 生成 ---
info ".env を生成中..."
cat > "$INSTALL_DIR/.env" <<EOF
# 自動生成: $(date '+%Y-%m-%d %H:%M:%S')
PASSWORD=${PASSWORD}
HASHED_PASSWORD=${HASHED_PASSWORD}
HOST_PORT=8080
TZ=Asia/Tokyo
PUID=${PUID}
PGID=${PGID}
EOF
chmod 600 "$INSTALL_DIR/.env"
success ".env 生成完了"
# --- docker-compose.yml 生成 ---
info "docker-compose.yml を生成中..."
cat > "$INSTALL_DIR/docker-compose.yml" <<'COMPOSE'
services:
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: code-server
restart: unless-stopped
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- HASHED_PASSWORD=${HASHED_PASSWORD}
- DEFAULT_WORKSPACE=/workspace
# ★ コンテナ内ロケールも日本語に
- LANG=ja_JP.UTF-8
- LC_ALL=ja_JP.UTF-8
ports:
- "${HOST_PORT}:8443"
volumes:
- ./config:/config
- ./workspace:/workspace
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8443"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
COMPOSE
success "docker-compose.yml 生成完了"
# --- Japanese Language Pack をコンテナ起動前に拡張機能フォルダへ配置 ---
# (起動後に code-server --install-extension を実行する方式)
info "起動後に Language Pack を自動インストールする設定を追加中..."
cat > "$INSTALL_DIR/install-ja-pack.sh" <<'SH'
#!/bin/bash
# コンテナ内で Language Pack をインストールするスクリプト
code-server --install-extension MS-CEINTL.vscode-language-pack-ja --force
echo "Japanese Language Pack のインストール完了"
SH
chmod +x "$INSTALL_DIR/install-ja-pack.sh"
# --- ファイアウォール ---
if ufw status 2>/dev/null | grep -q "Status: active"; then
info "ufw でポート 8080 を開放中..."
ufw allow 8080/tcp
success "ポート開放済み"
fi
# --- コンテナ起動 ---
info "コンテナを起動中..."
cd "$INSTALL_DIR"
docker compose pull
docker compose up -d
# --- 起動待ち ---
info "起動確認中 (最大40秒)..."
for i in $(seq 1 13); do
if curl -sf http://localhost:8080 &>/dev/null; then
break
fi
echo -n "."
sleep 3
done
echo ""
# --- Language Pack をコンテナ内でインストール ---
info "コンテナ内で Japanese Language Pack をインストール中..."
docker exec code-server \
code-server --install-extension MS-CEINTL.vscode-language-pack-ja --force \
2>/dev/null && success "Language Pack インストール完了" \
|| warn "Language Pack のインストールに失敗しました(ブラウザから手動でインストールしてください)"
# --- コンテナ再起動(Language Pack を反映) ---
info "設定を反映するためコンテナを再起動中..."
docker compose restart
sleep 5
# --- 完了メッセージ ---
HOST_IP=$(hostname -I | awk '{print $1}')
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} Code-Server (Docker版) セットアップ完了!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e " 🌐 アクセスURL : ${CYAN}http://${HOST_IP}:8080${NC}"
echo -e " 🔑 パスワード : ${YELLOW}${PASSWORD}${NC}"
echo ""
echo -e " 📁 インストール先: ${INSTALL_DIR}"
echo -e " 📄 設定ファイル : ${INSTALL_DIR}/.env"
echo ""
echo -e " ⚠ ブラウザのキャッシュをクリアしてアクセスしてください"
echo -e " (Ctrl+Shift+R または Cmd+Shift+R)"
echo ""
echo -e " 停止 : ${CYAN}cd $INSTALL_DIR && docker compose down${NC}"
echo -e " 再起動 : ${CYAN}cd $INSTALL_DIR && docker compose restart${NC}"
echo -e " ログ確認: ${CYAN}cd $INSTALL_DIR && docker compose logs -f${NC}"
echo ""
echo -e "${YELLOW} ⚠ 本番公開時はリバースプロキシ + HTTPS を推奨します${NC}"
echo ""
http://ホスト名:8080にアクセスしてパスワードを入力したら使えます。
テーマの変更は、左上のメニューから「ファイル」-「ユーザー設定」-「テーマ」-「配色テーマ」から行えます。もしくは左下の「設定」-「テーマ」-「配色テーマ」から。

Dockerを使わず直接インストールする
ローカルファイルを扱ったりするなら、直接インストールしておいたほうが良いですね。
#!/bin/bash
# ============================================================
# Code-Server ネイティブインストール + 日本語化
# 対象OS: Ubuntu 25.10 (Docker不使用)
# ============================================================
set -euo pipefail
GREEN='\033[0;32m'; CYAN='\033[0;36m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
success() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERR]${NC} $*"; exit 1; }
# --- root チェック ---
[[ $EUID -ne 0 ]] && error "root権限で実行してください: sudo bash $0"
# 実行ユーザーを特定
REAL_USER="${SUDO_USER:-$(logname 2>/dev/null || echo $USER)}"
REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6)
info "インストール対象ユーザー: $REAL_USER ($REAL_HOME)"
# --- パスワード自動生成 ---
info "パスワードを自動生成中..."
PASSWORD=$(openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 32)
# --- 依存パッケージ ---
info "依存パッケージをインストール中..."
apt-get update -qq
apt-get install -y -qq curl wget git build-essential locales
# --- 日本語ロケール ---
info "日本語ロケールを設定中..."
locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8
success "日本語ロケール設定完了"
# --- 最新バージョン取得 ---
info "最新バージョンを確認中..."
LATEST=$(curl -fsSL https://api.github.com/repos/coder/code-server/releases/latest \
| grep '"tag_name"' | sed 's/.*"v\([^"]*\)".*/\1/')
info "最新バージョン: v${LATEST}"
# --- ダウンロード & インストール ---
DEB_URL="https://github.com/coder/code-server/releases/download/v${LATEST}/code-server_${LATEST}_amd64.deb"
info "ダウンロード中: $DEB_URL"
wget -q --show-progress -O /tmp/code-server.deb "$DEB_URL"
dpkg -i /tmp/code-server.deb
rm /tmp/code-server.deb
success "code-server v${LATEST} インストール完了"
# --- config.yaml 生成 ---
CONFIG_DIR="$REAL_HOME/.config/code-server"
mkdir -p "$CONFIG_DIR"
cat > "$CONFIG_DIR/config.yaml" <<EOF
bind-addr: 0.0.0.0:8080
auth: password
password: ${PASSWORD}
cert: false
EOF
chown -R "$REAL_USER:$REAL_USER" "$CONFIG_DIR"
chmod 600 "$CONFIG_DIR/config.yaml"
success "config.yaml 生成完了"
# --- 日本語化設定 ---
info "日本語化設定を適用中..."
VSCODE_DIR="$REAL_HOME/.local/share/code-server/User"
mkdir -p "$VSCODE_DIR"
# ★ ポイント: argv.json で locale を指定(settings.json では効かない)
cat > "$VSCODE_DIR/argv.json" <<'EOF'
{
"locale": "ja"
}
EOF
# settings.json(エディタの基本設定)
cat > "$VSCODE_DIR/settings.json" <<'EOF'
{
"editor.fontSize": 14,
"editor.tabSize": 2,
"editor.wordWrap": "on",
"terminal.integrated.fontSize": 13
}
EOF
chown -R "$REAL_USER:$REAL_USER" "$REAL_HOME/.local/share/code-server" 2>/dev/null || true
success "日本語化設定完了 (argv.json)"
# --- Japanese Language Pack を事前インストール ---
info "Japanese Language Pack をインストール中..."
sudo -u "$REAL_USER" \
VSCODE_APPDATA="$REAL_HOME/.local/share/code-server" \
code-server --install-extension MS-CEINTL.vscode-language-pack-ja --force \
2>/dev/null && success "Language Pack インストール完了" \
|| warn "Language Pack のインストールに失敗しました(起動後に手動で入れてください)"
# --- systemd サービス登録 ---
info "systemd サービスを登録中..."
cat > /etc/systemd/system/code-server.service <<EOF
[Unit]
Description=code-server (VS Code in Browser)
After=network.target
[Service]
Type=exec
User=${REAL_USER}
WorkingDirectory=${REAL_HOME}
ExecStart=/usr/bin/code-server
Restart=always
RestartSec=5
Environment=LANG=ja_JP.UTF-8
Environment=LC_ALL=ja_JP.UTF-8
Environment=HOME=${REAL_HOME}
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable code-server
systemctl restart code-server
success "systemd サービス登録・起動完了"
# --- ファイアウォール ---
if ufw status 2>/dev/null | grep -q "Status: active"; then
info "ufw でポート 8080 を開放中..."
ufw allow 8080/tcp
success "ポート開放済み"
fi
# --- 起動確認 ---
info "起動確認中..."
sleep 4
if systemctl is-active --quiet code-server; then
success "code-server 正常起動"
else
warn "起動に問題がある可能性があります"
journalctl -u code-server -n 20 --no-pager
fi
# --- 完了メッセージ ---
HOST_IP=$(hostname -I | awk '{print $1}')
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} Code-Server セットアップ完了!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e " 🌐 アクセスURL : ${CYAN}http://${HOST_IP}:8080${NC}"
echo -e " 🔑 パスワード : ${YELLOW}${PASSWORD}${NC}"
echo ""
echo -e " 📄 設定ファイル : ${CONFIG_DIR}/config.yaml"
echo ""
echo -e " ⚠ ブラウザのキャッシュをクリアしてアクセスしてください"
echo -e " (Ctrl+Shift+R または Cmd+Shift+R)"
echo ""
echo -e " 起動 : ${CYAN}sudo systemctl start code-server${NC}"
echo -e " 停止 : ${CYAN}sudo systemctl stop code-server${NC}"
echo -e " ログ確認: ${CYAN}journalctl -u code-server -f${NC}"
echo ""
echo -e "${YELLOW} ⚠ 本番公開時はリバースプロキシ + HTTPS を推奨します${NC}"
echo ""


