Linux あれこれ

Linux 関連の備忘録です。

VirtualBox に「Fedora 36 Xfce」をインストール〈H151〉

登録日: 2022-05-10 更新日: 2022-05-10

最新の「Fedora 36 Xfce」のプレリリース版 (つまり、Beta 版) をVirtualBox にインストールしてみました。その備忘録です。

-

前回、Virtualbox にインストールした「Xubuntu 22.04 LTS 」の Firefox の起動があまりにも遅いので、Snap パッケージが使われない「Fedora 36 Xfce」(Beta) で確認してみました。

同じVirtualbox にインストールしたので条件は同じです。

-

-

使用したPC は「ASUS Chromebox CN60 」で、プロセッサは第4世代の「Intel Celeron 2955U 」です。

UEFI 立ち上げ」のPC です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック

-

-


目次

-

-

以前の作業:

ホストOS に「VirtualBox をインストール」

-

今回の作業:

「ISO イメージをダウンロード:」

「仮想マシンの作成:」

「Fedora 36 Xfce のインストール」

「日本語入力:」

「アプリのインストール」

「ゲームのインストール」

「フォントのインストール」

「パネルの設定」

「まとめ へ」

-

「目次詳細 へ」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - -

Fedora 36 Xfce」のデスクトップ

-

小さめのサイズで画面を表示:

→ホストOS をメインで使うときの配置です。しゃれてますね。

-

全画面で表示:

→デフォルトの壁紙はユニーク。いい感じ。

画面下にあった「パネル2」は画面右に移動しました。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --

VirtualBox」について:

-

-

  • 仮想マシンを使うことで、ハードウェアで問題となるPC でも、最新のLinux ディストリビューションをインストールできる可能性が高いです。

  • 余計なソフトが一緒に動くので、その分、負荷が大きいことと、メモリとストレージを使います。

→今回使った「ASUS Chromebox CN60」は、メモリ8GB、M.2 SSD 240GB に増設しています。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ---

Fedora」について:

-

公式サイト:

Fedora へようこそ

Fedora」(フェドラ)の特徴は「先進性」です。Fedora で採用された最新の技術が「CentOS」(Stream) でも試され、その後、商用LinuxRHEL(Red Hat Enterprise Linux) で使われるという開発サイクルになっています。
以前とは「CentOS」の位置がリスクが増える方に変わり、「CentOS」を使う意味が薄れました。

-

Fedora の 標準のデスクトップ環境は「GNOME」です。

それ以外のデスクトップ環境は、Fedora Spin にて、提供されています。

-

今回はリリース前の「プレリリース」である「Fedora 36 Beta デスクトップ Spins」を選びました。

-


Fedora 36 Xfce の現在のバージョンを表示:

2022-05-09 現在

カーネル:

$ uname -r
5.17.5-300.fc36.x86_64

カーネルは他のディストリビューションよりも最新です。
「fc36」は「Fedora 36」リポジトリを示します。

-

リリース:

$ cat /etc/fedora-release
Fedora release 36 (Thirty Six)

-

Fedora 36 Xfce」が、「x11」と「Wayland」のどちらで動作しているか、を確認:
$ echo $XDG_SESSION_TYPE
x11

→「Fedora 36 Xfce」は、「Wayland」ではなく、「x11」で動作しています。

-

「Wayland」で動かすと支障の出る(アプリを使いたい)PC で使うには「Fedora 36 Xfce」は良いかも。

デフォルトで「x11」に設定されているので、「検証されている」という点で強みです。 また、「Fedora」はカーネルが最新なので、最新のプロセッサでも「x11」がサポートされる可能性があります。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----

1. ホストOS : Xubuntu 20.04.4 LTS

-

Xubuntu 20.04.4 LTS の現在のバージョンを表示:

2022-05-09 現在

カーネル:

$ uname -r
5.13.0-40-generic

カーネルは、5.8 以降です。

-

リリース:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"

→ひとつ前のリリースを使う、安定志向のポイントリリース版(延命版)です。 ポイントリリースの番号がひとつアップ (20.04.4) しました。

-


システム更新で最新にしました:

$ sudo apt update
$ sudo apt upgrade

-

再起動

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - -----

2. ホストOS 「Xubuntu 20.04.4 LTS」に「VirtualBox」をインストール:

-

前回の作業 を参照:

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -

3. 「ゲストOS」のISO イメージをダウンロード:

-

1). Fedora 36 Beta デスクトップ Spins のダウンロード

XFCE 64-bit image

-

2). CHECKSUM ファイルをダウンロード:

Verify 64bit! 」を右クリック→「名前を付けてリンク先を保存」

→「Fedora-Spins-36_Beta-1.4-x86_64-CHECKSUM」→「保存」

-

3). イメージの保存場所と同じフォルダーに保存:

$ cd ~/ダウンロード/Fedora/
$ ls -1
Fedora-Spins-36_Beta-1.4-x86_64-CHECKSUM
Fedora-Xfce-Live-x86_64-36_Beta-1.4.iso

-

4). 「curl」がインストールされていない場合:

ダウンロードしたPC で操作は異なります:

-

Ubuntu の場合:
$ sudo apt install curl

-

Fedora の場合:
$ sudo dnf install curl

-

5). Fedora の GPG 鍵をインポート:

$ curl https://getfedora.org/static/fedora.gpg | gpg --import
:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--   0     0    0     0    0     0      0      0 --:--:--   0     0    0     0    0     0      0      0 --:--:-- 100 14221  100 14221    0     0   5440      0  0:00:02  0:00:02 --:--:--  5440
gpg: 鍵F55AD3FB5323552A:"Fedora (37) <fedora-37-primary@fedoraproject.org>"変更なし
gpg: 鍵999F7CBF38AB71F4:"Fedora (36) <fedora-36-primary@fedoraproject.org>"変更なし
gpg: 鍵DB4639719867C58F:"Fedora (35) <fedora-35-primary@fedoraproject.org>"変更なし
gpg: 鍵1161AE6945719A39:"Fedora (34) <fedora-34-primary@fedoraproject.org>"変更なし
gpg: 鍵49FD77499570FF31:"Fedora (33) <fedora-33-primary@fedoraproject.org>"変更なし
gpg: 鍵7BB90722DBBDCF7C:"Fedora (iot 2019) <fedora-iot-2019@fedoraproject.org>"変更なし
gpg: 鍵8A3872BF3228467C:"Fedora (epel9) <epel@fedoraproject.org>"変更なし
gpg: 鍵21EA45AB2F86D6A1:"Fedora EPEL (8) <epel@fedoraproject.org>"変更なし
gpg: 鍵6A2FAEA2352C64E5:"Fedora EPEL (7) <epel@fedoraproject.org>"変更なし
gpg: 処理数の合計: 9
gpg:              変更なし: 9

-

6). CHECKSUM ファイルが有効であることを検証:

$ gpg --verify-files *-CHECKSUM
:
gpg: 2022年03月26日 01時19分06秒 JSTに施された署名
gpg:                RSA鍵53DED2CB922D8B8D9E63FD18999F7CBF38AB71F4を使用
gpg: "Fedora (36) <fedora-36-primary@fedoraproject.org>"からの正しい署名 [不明の]  ←★
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:          この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガープリント: 53DE D2CB 922D 8B8D 9E63  FD18 999F 7CBF 38AB 71F4

→「★」の行があれば OK

署名はまだしていないので、警告が表示されます。

-

7). イメージのチェックサムが合致することを確認:

$ sha256sum -c *-CHECKSUM
sha256sum: Fedora-Cinnamon-Live-x86_64-36_Beta-1.4.iso: そのようなファイルやディレクトリはありません
Fedora-Cinnamon-Live-x86_64-36_Beta-1.4.iso: FAILED open or read
sha256sum: Fedora-KDE-Live-x86_64-36_Beta-1.4.iso: そのようなファイルやディレクトリはありません
Fedora-KDE-Live-x86_64-36_Beta-1.4.iso: FAILED open or read
sha256sum: Fedora-LXDE-Live-x86_64-36_Beta-1.4.iso: そのようなファイルやディレクトリはありません
Fedora-LXDE-Live-x86_64-36_Beta-1.4.iso: FAILED open or read
sha256sum: Fedora-LXQt-Live-x86_64-36_Beta-1.4.iso: そのようなファイルやディレクトリはありません
Fedora-LXQt-Live-x86_64-36_Beta-1.4.iso: FAILED open or read
sha256sum: Fedora-MATE_Compiz-Live-x86_64-36_Beta-1.4.iso: そのようなファイルやディレクトリはありません
Fedora-MATE_Compiz-Live-x86_64-36_Beta-1.4.iso: FAILED open or read
sha256sum: Fedora-SoaS-Live-x86_64-36_Beta-1.4.iso: そのようなファイルやディレクトリはありません
Fedora-SoaS-Live-x86_64-36_Beta-1.4.iso: FAILED open or read
Fedora-Xfce-Live-x86_64-36_Beta-1.4.iso: OK  ←★
sha256sum: Fedora-i3-Live-x86_64-36_Beta-1.4.iso: そのようなファイルやディレクトリはありません
Fedora-i3-Live-x86_64-36_Beta-1.4.iso: FAILED open or read
sha256sum: 警告: 書式が不適切な行が 19 行あります
sha256sum: 警告: 一覧にある 7 個のファイルが読み込めませんでした

→「★」の行があれば OK

他のspin とも共用しているので、ゴミが表示されます。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- --

4. 「仮想マシン」の作成:

-

1). システム→「VirtualBox」→「VirtualBox」を起動

-

2). 右上の「新規」ボタンをクリック

-

3). 名前とオペレーティングシステム:

-

名前:Fedora-Xfce   ←(好きな英字の名前、フォルダ名になります)
タイプ:Linux
バージョン:Fedora (64-bit)

→「次へ」

-

4). メモリサイズ:

3000 MB   ←(大きく取りすぎると、 ホストOS が不調になります)

→「次へ」

-

5). ハードディスク:

「仮想ハードディスクを作成する」にチェック ←(つまり、ファイルが使われます)

→「作成」

-

6). ハードディスクのファイルタイプ:

「VDI(VirtualBox Disk Image)」にチェック ←(つまり、VirtualBox 形式)

→「次へ」

-

7). 物理ハードディスクにあるストレージ:

「可変サイズ」にチェック

→「次へ」

-

8). ファイルの場所とサイズ:

仮想ハードディスクとなるファイルが格納される、フォルダの指定:

今回は「/home/ubn/VirtualBox VMs/Fedora-Xfce/Fedora-Xfce.vdi」

→すでに入っている指定のまま、にしました。

-

可変サイズにした場合の、ファイルサイズの上限値:

8.00 GB →「30.00 GB」に変更(10 GB だとシステム更新だけですぐ一杯 になりました)

→「作成」

-

9). 仮想マシンの「Fedora-Xfce」が作成されました:

実際のハードウェアによっての制限はありますが、汎用のドライバーが使われることと、下記のように設定値を後から見直して、すぐに変更が反映できるのがすごいところ。

-

10). 「ディスプレイ」の設定を変更:

「ディスプレイ」をクリック→「スクリーン」タブ

- ビデオメモリー: 16MB →「256MB」に変更
- グラフィックコントローラー: VMSVGA →「VBoxSVGA」に変更

→「VBoxSVGA」に変更しないと、デスクトップが「真っ暗のまま」起動できないことがありました。

-

11). 「システム」の設定を変更:

「システム」をクリック→「マザーボード」タブ

- 「EFI を有効化」にチェック

→ゆくゆくは、実機(ホストOS )にインストールすることを考えて、同じ手順になるようしました。

-

「システム」をクリック→「プロセッサー」タブ

- プロセッサー数 : 1 CPU →「2 CPU」に変更

→使われているプロセッサが持つ、物理的な数と合わせると、速度の向上が期待できます。 使われているプロセッサにより数は違うので注意。

-

→「OK」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ---

5. 仮想マシンに、ゲストOS として「Fedora 36 Xfce」をインストール

-

1). 「ライブ CD」をセットして、仮想マシンを起動

-

(1). インストールする仮想マシンを選択

-

(2). 右側の「ストレージ」にて、「ライブ CD」をセット

IDE セカンダリマスター: [光学ドライブ] 空 をクリック

→「ディスクファイルを選択」

→「~/ダウンロード/Fedora/Fedora-Xfce-Live-x86_64-36_Beta-1.4.iso」を選んで「開く」

「空」→「Fedora-Xfce-Live-x86_64-36_Beta-1.4.iso」に変わりました。

-

-

(3). 「起動」(緑色の右矢印)ボタンをクリック

→ライブ CD を作成する手間が要らないので楽です。

-

2). ブート選択画面が表示

→2番めの「Test this media ...」が選択されています。

1番めの「Start Fedora-Xfce-Live 36_Beta」を選択して、

→Enter

-

2). スプラッシュ画面が表示:

-

3). Live のデスクトップ画面が表示:

-

4). インストーラを起動したときに画面が入りきれないので、デスクトップ画面を広げました:

VirtualBox ウィンドウのメニューバー →表示 →「ゲストOSの画面を自動リサイズ」のアイコンにチェックが入っていることを確認。

-

(1). ウィンドウの右下隅をドラッグして、ウィンドウサイズを広げました:

現時点では、余白が広がるだけです。

-

(2). ログアウト→ログイン:

「Applications」→「Log Out」→「Log Out」

-

(3). ログイン画面:

→余白の分だけ、画面が広がっています。

-

「Live System User」のままで、→「Log In」をクリック

-

(4). デスクトップ画面が広がりました:

-

5). デスクトップ画面にある「Fedora」アイコン (Install to Hard Drive) をダブルクリック

-

6). インストーラの「FEDORA 36 へ ようこそ。」画面が表示

→すでに日本語表示です。

-

(1). インストール時に使用する言語 を選択

「日本語 - 日本語(日本)」

→「続行」

-

(2). 「プレリリース版」であることの警告画面が表示

→「続行」

-

(3). 「インストール概要」画面が表示

-

地域設定
  キーボード(K) 日本語
  時刻と日付(T) アジア/東京 タイムゾーン

システム
  インストール先(D) オレンジ色のチェックが付いています。 ←(赤色)
  ネットワークとホスト名(N)

ユーザーの設定
  rootアカウント(R)   ←(赤色)
  ユーザーの作成(U)   ←(赤色)

設定の終わっていない赤色の項目は、3つありました

-

(4). キーボード を選択

「日本語」が選ばれていました。「日本語(日本)」

右にある「レイアウト設定をテストする」に「@@」を入力して確認

→画面左上の「完了」をクリック

-

(5). 時刻と日付 を選択

地図で日本をクリックすると選択できます。

→地域「アジア」、都市「東京」、ネットワーク時刻「オン」

-

→画面左上の「完了」をクリック

-

(6). root アカウント を選択

「 rootアカウントを無効化」にチェックが入っていることを確認

→画面左上の「完了」をクリック

-

(7). ユーザーの作成 を選択

フルネーム: 任意

ユーザー名: 任意

「このユーザーを管理者にする」にチェック

「このアカウントを使用する場合にパスワードを必要とする」にチェック

パスワード: 任意

パスワードの確認: 任意

→画面左上の「完了」をクリック

-

(8). インストール先 を選択

(参考: VirtualBox の場合の表示です)

-

バイスの選択

ローカルの標準ディスク

内蔵HDD:

30 GiB
ATA VBOX HARDDISK
sda / 30 GiB の空き

→上記のアイコンにチェックが付いていることを確認

-

ストレージの設定

「自動構成」→「カスタム」にチェック

→左上の「完了」

-

「手動パーティション設定」画面

「BTRFS」→「標準パーティション」に変更

ここをクリックすると自動的に作成します」の水色のリンクをクリック

-

もしくは、手動で設定しても良いです:

-

-

右下のラベル: 「Fedora」を入力  ←(マウントしたときにわかりやすいです)

-

→画面右下の「すべての変更」をクリック

→「現在の設定を保持する」をクリック

→画面左上の「完了」をクリック

-

「変更の概要」画面表示

→「変更を許可する」

-

「インストール概要」画面に戻りました

→すべての項目に、オレンジ色のチェックがないことを確認。

-

(8). 右下の「インストールの開始」をクリック

→インストール処理が開始

-

(9). 「完了しました!」表示

-

デスクトップ画面を広げた場合:

→右下の「終了」をクリック

-

デスクトップ画面を広げていない場合:

画面が狭い「848x635」ので、右下の「終了」がはみ出して表示されません。

ちなみに、画面下の黒い短いバーは「スクロールバー」ではなく、「パネル2」が隠れているバーです。

-

画面からは見えませんが、「Tab」キー →「Enter」キー で終了できます。

-

もしくは、

パネルの左上の「Anaconda Installer」アイコンを右クリック→「Close」

→「インストールプロセスを終了してもよろしいですか?」→「はい」

-

7). 「インストーラ」が終了して、デスクトップが表示

「Applications」→「Log Out」→「Shut Down」

-

8). 右側の「ストレージ」にて、「ライブ CD」を取り外し

IDE セカンダリマスター: [光学ドライブ] Fedora-Xfce-Live-x86_64-36_Beta-1.4.iso をクリック

→「仮想ドライブからディスクを除去」

→「空」に変わりました。

-

9). 「起動」(緑色の右矢印)ボタンをクリック

-

10). カーネル選択メニュー:

→一番上のカーネルが選ばれています。

そのまま、Enter

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----

6. インストール完了後の最初の再起動

-

1). ログイン画面が表示

→パスワード入力

-

2). デスクトップ画面が表示されました:

-

3). 画面下のパネルにて、「端末」アイコンをクリック

→端末が起動

[ubn@fedora ~]$

→プロンプトを見ると、コンピュータ名は「fedora」です。 どのPC も同じなので、後でホスト名を修正します。

-

4). インストール直後のカーネル:

$ uname -r
5.17.0-0.rc7.116.fc36.x86_64

$ cat /etc/fedora-release
Fedora release 36 (Thirty Six)

-

5). VirtualBox ウィンドウ画面を広げました:

-

設定の確認:

VirtualBox ウィンドウのメニューバー →表示 →「ゲストOSの画面を自動リサイズ」のアイコンにチェックが入っていることを確認

-

ウィンドウのサイズを広げました

ウィンドウのタイトルバーの右の「最大化」ボタンで最大に広げるか、ウィンドウの右下をドラッグして、任意のサイズにウィンドウを広げました。

現時点では、余白が広がるだけです。

-

アプリケーション→「ログアウト」→「ログアウト」

-

広げた画面サイズで、ログイン画面が表示

→ログインパスワード入力

-

広げた画面サイズで、デスクトップが表示されました。

-

6). システム更新

$ sudo dnf update
:
y/N   ←(「y」Enter)

Fedora ではデフォルトが「N」です。「y」を入力しないと中止されます。

→最初のシステム更新は、とても時間がかかりました。

-

7). 再起動

$ reboot

-

8). カーネル選択メニュー:

→新しいカーネルが選ばれています。

そのまま、Enter

-

9). 再起動後の確認:

$ cat /etc/fedora-release
Fedora release 36 (Thirty Six)
$ cat /etc/os-release
NAME="Fedora Linux"
VERSION="36 (Xfce)"
ID=fedora
VERSION_ID=36
VERSION_CODENAME=""
PLATFORM_ID="platform:f36"
PRETTY_NAME="Fedora Linux 36 (Xfce)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:36"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f36/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=36
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=36
PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
VARIANT="Xfce"
VARIANT_ID=xfce
$ uname -r
5.17.5-300.fc36.x86_64

カーネルがアップ

$ ls -1
ダウンロード
テンプレート
デスクトップ
ドキュメント
ビデオ
音楽
画像
公開
$ ls -1a
.
..
.ICEauthority
.bash_history
.bash_logout
.bash_profile
.bashrc
.cache
.config
.gnupg
.local
.mozilla
.vboxclient-clipboard.pid
.vboxclient-draganddrop.pid
.vboxclient-seamless.pid
.xsession-errors
.xsession-errors.old
ダウンロード
テンプレート
デスクトップ
ドキュメント
ビデオ
音楽
画像
公開
$ id
uid=1000(ubn) gid=1000(ubn) groups=1000(ubn),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

→sudo も使えました。日本語のホームフォルダが作成されていました。 id 表示で、見かけない文字列があるのは「Fedora 固有」の設定です。

-

参考:

RHEL 制限のあるユーザーおよび制限のないユーザー

-

10). ロケールの確認:

$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

Fedora では「LANGUAGE=」の項目は表示されません。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -----

7. Fedora 固有の設定:

-


1). ホスト名の変更:

  • プロンプトのホスト名が「fedora」です

Workstation 版のインストールでは、コンピュータ名の設定を聞いてきません。 デフォルトの「fedora」になっていました。

-

(1). プロンプト表示:
[ubn@fedora ~]$ 

→[ユーザ名@コンピュータ名 カレントディレクトリ]$

-

(2). ホスト名を表示:
$ uname -n
fedora

$ hostname
fedora
[ubn@fedora ~]$ hostnamectl
   Static hostname: n/a          ←(未設定)
Transient hostname: fedora
         Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: d0b0f3fcde2e49e5bc250d6fa91a78f5
         Boot ID: 31d279db173549e2be52bdd91b14a069
  Virtualization: oracle
Operating System: Fedora Linux 36 (Xfce)          
     CPE OS Name: cpe:/o:fedoraproject:fedora:36
          Kernel: Linux 5.17.5-300.fc36.x86_64
    Architecture: x86-64
 Hardware Vendor: innotek GmbH
  Hardware Model: VirtualBox

-

(3). ホスト名を変更:
$ sudo hostnamectl set-hostname ubn-box

→「ubn-box」に設定しました。あまり長いとプロンプトが見づらいです。

-

(4). 再起動
$ reboot

-

(5). プロンプト表示:
[ubn@ubn-box ~]$ 

-

(6). ホスト名を表示:
$ uname -n
ubn-box

$ hostname
ubn-box
$ hostnamectl
 Static hostname: ubn-box         ←(設定されています)
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: d0b0f3fcde2e49e5bc250d6fa91a78f5
         Boot ID: 31d279db173549e2be52bdd91b14a069
  Virtualization: oracle
Operating System: Fedora Linux 36 (Xfce)          
     CPE OS Name: cpe:/o:fedoraproject:fedora:36
          Kernel: Linux 5.17.5-300.fc36.x86_64
    Architecture: x86-64
 Hardware Vendor: innotek GmbH
  Hardware Model: VirtualBox

→Static hostname が設定されました。

-


2). 立ち上げ時のカーネル選択メニューの保持数を増やしました:

Fedora の場合のカーネル更新は新しすぎてリスキーです。そのせいでカーネルの更新が多いですし、そのため、立ち上げ時にカーネル選択メニューが表示されます。

デフォルトの設定では、 3回の更新で一番古いカーネルは削除されます。これだと安定動作していたカーネルが削除され、不安定なカーネルだけになる可能性があります。

-

(1). 設定ファイルの編集:
$ sudo mousepad /etc/dnf/dnf.conf

下記の行を修正:

installonly_limit=3

↓ 数字を増やしました:

installonly_limit=5

-

(2). 確認:
$ cat /etc/dnf/dnf.conf
[main]
gpgcheck=1
installonly_limit=5           ←(注目)
clean_requirements_on_remove=True
best=False
skip_if_unavailable=True

→保存される数は、これぐらいで大丈夫かな。 多いとメニューの見やすさと、ディスク容量に影響。

-

(3). 再起動:
$ reboot

-

(4). カーネル選択メニューの画面

→新しいカーネルの更新がないので、変っていません。

もし、カーネルの更新があれば、そのたびに、メニュー項目が増えていきます。

-

デフォルトの 3 のままだと、(安定していた)インストール時のカーネルバージョンは次々に消えて行きます。 動いているカーネルを温存するのは大切です。

-

(5). 参考: カーネル選択メニューの項目が増えすぎた場合の対処

Fedora でのカーネルの扱い方の参考に:

Fedora 32 Cinnamon を実機で動かした場合のカーネル奮闘記 が 参考になるかも。

-

気にならないなら、そのままでもいいし、数字を減らしてもいいと思います。 次回のカーネル更新できれいに掃除されます。

-


3). 参考: Fedora リポジトリを近くのミラーに設定:

今回は「プレリリース版」なので、配布が遅れるリスクがあるので、ミラーは変更しません。リリースされたら設定変更します。

-

(1). 設定:
$ sudo mousepad /etc/dnf/dnf.conf

↓ 最後に下記の行を追加:

fastestmirror=True

-

(2). 確認:
$ cat /etc/dnf/dnf.conf

[main]
gpgcheck=1
installonly_limit=5
clean_requirements_on_remove=True
best=False
skip_if_unavailable=True
fastestmirror=True          ←(注目)

-

(3). 反映:
$ sudo dnf update
:
依存関係が解決しました。
行うべきことはありません。
完了しました!

→普段と変わらないメッセージ。Fedora だと時間が経たないと、速いミラーに設定されたのかよくわかりません。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- -

8. VirtualBox のスナップショットの作成:

-

VirtualBox につき、スナップショットを切りの良いところで取っておくと、 何かあったときにその時点に戻せるので保険になります。

→ただし、「ディスク容量を圧迫する」ので注意。すぐに足りなくなります。

-

スナップショットの作成:

-

(1). デスクトップ画面を表示させます

-

(2). 仮想マシン →スナップショット

Ubuntu の場合の画面ですが、操作は同じです。

-

(3). スナップショットの名前: 「start 0」 ←(任意の名前)

→OK

-

スナップショットの名前はウィンドウタイトルに含まれて表示されるので、短めにするのがコツです。

(4). 再起動

→スナップショットの名前「start 0」 が含まれたタイトルバーで「VirtualBox のウィンドウ」が立ち上がります。

-

  • 後は、何か大きめの作業を行う前にスナップショットの作成を行うようにすると安心です。

→その作成した時点に簡単に戻せます。(データも戻るので注意)

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- --

9. 日本語入力

-

1). 日本語入力は「ibus-anthy」がインストール済みでした:

$ dnf list ibus* | grep @
:
ibus.x86_64                           1.5.26-4.fc36                    @fedora  
ibus-anthy.x86_64                     1.5.14-4.fc36                    @updates 
ibus-anthy-python.noarch              1.5.14-4.fc36                    @updates 
ibus-gtk2.x86_64                      1.5.26-4.fc36                    @fedora  
ibus-gtk3.x86_64                      1.5.26-4.fc36                    @fedora  
ibus-gtk4.x86_64                      1.5.26-4.fc36                    @fedora  
ibus-hangul.x86_64                    1.5.4-8.fc36                     @anaconda  ←(不要)
ibus-libpinyin.x86_64                 1.12.91-1.fc36                   @updates   ←(不要)
ibus-libs.x86_64                      1.5.26-4.fc36                    @fedora  
ibus-libzhuyin.x86_64                 1.10.0-4.fc36                    @anaconda  ←(不要)
ibus-m17n.x86_64                      1.4.9-2.fc36                     @anaconda  ←(不要)
ibus-setup.noarch                     1.5.26-4.fc36                    @fedora  
ibus-typing-booster.noarch            2.15.25-1.fc36                   @fedora    ←(不要)

Fedora の標準が「ibus-kkc」から変更されました。日本以外の国の変換エンジンも含まれています。

ちなみにこちらの表示は、インストール済みのアプリのリポジトリに「@」が付くのを利用しています。 「--installed」オプションでもいいです。

-

2). 参考: 使わない言語のパッケージを削除:

$ sudo dnf remove ibus-hangul ibus-libpinyin ibus-libzhuyin ibus-m17n
:
削除中:
 ibus-hangul          x86_64       1.5.4-8.fc36           @anaconda       202 k
 ibus-libpinyin       x86_64       1.12.91-1.fc36         @updates        3.0 M
 ibus-libzhuyin       x86_64       1.10.0-4.fc36          @anaconda        40 M
 ibus-m17n            x86_64       1.4.9-2.fc36           @anaconda       161 k
未使用の依存関係の削除:
 libhangul            x86_64       0.1.0-25.fc36          @anaconda       6.3 M
 libpinyin            x86_64       2.6.2-1.fc36           @updates        695 k
 libpinyin-data       x86_64       2.6.2-1.fc36           @updates         49 M
 libzhuyin            x86_64       2.6.2-1.fc36           @updates        596 k

→「m17n」はインドで使われます。

-

確認:
$ dnf list --installed ibus*
:
インストール済みパッケージ
ibus.x86_64                               1.5.26-4.fc36                 @fedora 
ibus-anthy.x86_64                         1.5.14-4.fc36                 @updates
ibus-anthy-python.noarch                  1.5.14-4.fc36                 @updates
ibus-gtk2.x86_64                          1.5.26-4.fc36                 @fedora 
ibus-gtk3.x86_64                          1.5.26-4.fc36                 @fedora 
ibus-gtk4.x86_64                          1.5.26-4.fc36                 @fedora 
ibus-libs.x86_64                          1.5.26-4.fc36                 @fedora 
ibus-setup.noarch                         1.5.26-4.fc36                 @fedora 
ibus-typing-booster.noarch                2.15.25-1.fc36                @fedora 

-

3). 「ibus-anthy」について

  • 辞書学習されるようになりヒット率は使うたびに良くなります。

  • デフォルトの入力メソッドを切り替えるキーは「Window+スペース」キーです。

→使いづらいのでキーの割り当てを変更。ただし、2段階の切り替えなので不便。

-


4). デフォルトの入力メソッドを切り替えるキーを「半角/全角」キーに割当て:

-

(1). メニュー →設定 →「入力メソッドのセレクター」→「IBUS を使用する」の右にある「設定…」をクリック

→「IBus の設定」画面表示:

-

(2). 設定の変更:

-

「一般」タブ

次の入力メソッド: 「space」

その右の「…」→「削除」

-

「Super」のチェックを外します

「space」の右の「…」→「無効」をクリック→「新しいアクセレータ」→「半角/全角」キー

→「Zenkaku_Hankaku」に変わりました

→「追加」→「OK」

次の入力メソッド: 「Zenkaku_Hankaku」に変わりました

-


5). 日本語オンとオフのキーを別々に割り当て:

- 「ひらがな」にて日本語オン(日本語入力)
- 「無変換」にて日本語オフ(英文字入力)

-

(1). 「入力メソッド」タブ

→「日本語 - Anthy」を選んで、「設定」ボタンをクリック

→「IBus-Anthy の設定」画面表示

-

(2). 「半角英数」キーの割り当て:

「キー割り当て」タブ

-

latin_mode [] を選んで、「編集」

キーコード右の「…」→「無変換」キー→「Muhenkan」→「追加」→「OK」

-

下記の表示に変わりました:

latin_mode       [Muhenkan]

-

(3). 「ひらがな」キーの割り当て

hiragana_mode [] を選んで、「編集」

キーコード右の「…」→「ひらがな」キー→「Hiragana_Katakana」→「追加」→「OK」

-

下記の表示に変わりました:

hiragana_mode  [Hiragana_Katakana] 

→「閉じる」

-


6). 入力メソッドのアイコン文字は「明るい水色」に変更されたので、色の変更は要りません:

-


7). 参考: 「ibus-anthy」の日本語変換の学習履歴についての考察:

  • ibus-anthy」の学習履歴について興味がなければスキップしてください。

-

  • Anthy 辞書管理」として「kasumi」をインストールして辞書登録するやり方もあります。

  • 最初の候補は残念ながら的外れ。でも「ibus-anthy」になかった学習機能が付きました。

→同じ言葉でも助詞を変えて、いろいろな表現のしかたをくりかえし変換すると、使っている人の「よく使う候補」が表示されるようになってきます。「ibus-skk」がなくても鍛えられます。これなら使えるかも。

-

(1). 学習履歴のファイル:
$ less ~/.config/anthy/last-record2_default.utf8

→後ろに行くほど最新の登録で、日本語変換のたびに、リアルタイムに追加されていきます。

「ADD "PREDICTION"」(予測)と「ADD "CAND_HISTORY"」(履歴)がペアみたい。

→変換時に誤変換したらそれを修正して変換するやり方を続けていくと、修正した履歴も残り、精度が上がっていきます。

ADD "PREDICTION" S"つかっている" N1629080411 S"使っている"
ADD "CAND_HISTORY" S"つかっている" S"使っている"
ADD "PREDICTION" S"ひと" N1629080412 S"人"
ADD "CAND_HISTORY" S"ひと" S"人" S"人"
ADD "PREDICTION" S"そだてて" N1629080427 S"育てて"
ADD "CAND_HISTORY" S"そだてて" S"育てて"

→その後、「使っている人、育てて」一発で変換

履歴がある程度蓄積されると、これを元に下記の正式な形式のユーザ辞書が自動で作られました。

-

(2). 上記からユーザ辞書となるファイルがしばらくすると自動作成されます:

時間経過がないと作成されていないので注意:

$ mousepad ~/.config/anthy/last-record1_default.utf8

抜粋:

--- UNKNOWN_WORD
+えでぃた "エディタ" 
+てきすと "テキスト" 
+しすてむ "システム" 
--- SUFFIX_HISTORY
+ご "後" 
+てん "点" 
--- INDEPPAIR  ←(修正した履歴)
+機動 "起動" 
+矢印 "→" 
+昨日 "機能" 
+報国 "報告" 
+会誌 "開始" 
+恩 "オン" 
--- OCHAIRE
+ほーむふぉるだが 2 3 "ホーム" 5 "フォルダが" 
+ひらきました。 2 6 "開きました" 1 "。" 
+ちいきせってい 2 3 "地域" 4 "設定" 
+どっくにある 2 4 "ドックに" 2 "ある" 
+がめんした 2 3 "画面" 2 "した" 
+かんりょうご 2 5 "完了" 1 "後" 
--- CAND_HISTORY
+いんすとーる "インストール" "インストール" "インストール" "インストール" "インストール" "インストール" "インストール" "インストール" 
+ちゅういてんは "注意点は" 
+さくせい "作成" "作成" 
+ほーむ "ホーム" 
+にほんごの "日本語の" 
+きどう "起動" "起動" "起動" "起動" "起動" "機動"   ←(最後の"機動"を削除しました)
+たんまつ "端末" 
+やじるし "→" "→" "→" "→" "→" "→" "→" "→" 
+つかいやすく "使いやすく" "使いやすく" 
--- PREDICTION
+さきに 1629102594 "先に" 
+いんすとーる 1629102593 "インストール" 
+ちゅういてんは 1629102588 "注意点は" 
+さくせい 1629102506 "作成" 
+れいあうと 1629097742 "レイアウト" 
+でふぉると 1629097725 "デフォルト" 
+ためしてみました 1629097546 "試してみました" 
+らいぶ 1629097165 "ライブ" 
+たちあげ 1629097155 "立ち上げ" 

→「ibus-kkc」の辞書(つまり、ibus-skk の辞書)の形式と同じ。

-

この辞書を時々確認して、余計な行や部分を削除。このファイルを保存して使い回せば、役に立ちそう。

-

(3). ちなみに、辞書関連のファイル
$ ls -1 ~/.config/anthy/

imported_words_default.d
imported_words_ibus__emoji    ←(リンク-> /usr/share/ibus-anthy/dicts/emoji.t)
imported_words_ibus__era      ←(リンク-> /usr/share/ibus-anthy/dicts/era.t)
imported_words_ibus__oldchar  ←(リンク-> /usr/share/ibus-anthy/dicts/oldchar.t)
imported_words_ibus__zipcode  ←(リンク-> /usr/share/ibus-anthy/dicts/zipcode.t)
last-record1_default.utf8
last-record2_default.utf8
lock-file_default

-

$ ls -1 ~/.config/anthy/imported_words_default.d/
ibus__symbol                ←(リンク-> /usr/share/ibus-anthy/dicts/symbol.t)

→ほとんどが「.t」付きの辞書へのリンクです。

-

8). 辞書の使い方

-

(1). その都度、使う辞書を選びます:

パネルの「あ」を左クリック→「辞書モード(般)」→「郵便番号変換」にて、「辞書モード(〒)」に変化

-

(2). 使用:

「060ー0000」「スペース」→「北海道札幌市中央区

-

(3). 解除:

パネルの「あ」を左クリック→「辞書モード(〒)」→「一般」→「辞書モード(般)」に変化

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ---

10.「Fedora 36 Xfce」の標準アプリ

-

デフォルトのアプリ:

-

インストール済みのパッケージグループ
$ dnf group list --installed
:
インストール済みの環境グループ:
   Xfce デスクトップ
インストール済みのグループ:
   管理ツール

-

$ dnf group list --ids
:
利用可能な環境グループ:
   Fedora Custom Operating System (custom-environment)
   最小限のインストール (minimal-environment)
   Fedora Server Edition (server-product-environment)
   Fedora Workstation (workstation-product-environment)
   Fedora Cloud Server (cloud-server-environment)
   KDE Plasma デスクトップワークスペース (kde-desktop-environment)
   LXDE デスクトップ (lxde-desktop-environment)
   LXQt Desktop (lxqt-desktop-environment)
   Cinnamon デスクトップ (cinnamon-desktop-environment)
   MATE デスクトップ (mate-desktop-environment)
   Sugar デスクトップ環境 (sugar-desktop-environment)
   Deepin Desktop (deepin-desktop-environment)
   開発環境とクリエイティブワークステーション (developer-workstation-environment)
   Web サーバー (web-server-environment)
   インフラサーバー (infrastructure-server-environment)
   基本的なデスクトップ環境 (basic-desktop-environment)
   i3 desktop (i3-desktop-environment)
インストール済みの環境グループ:
   Xfce デスクトップ (xfce-desktop-environment)
インストール済みのグループ:
   管理ツール (admin-tools)
利用可能なグループ:
   3D プリント (3d-printing)
   Audio Production (audio)
   著作と発行 (authoring-and-publishing)
   C 開発ツールとライブラリー (c-development)
   クラウド基盤 (cloud-infrastructure)
   Cloud Management Tools (cloud-management)
   Compiz (compiz)
   Container Management (container-management)
   D Development Tools and Libraries (d-development)
   デサインスイート (design-suite)
   開発ツール (development-tools)
   Domain Membership (domain-client)
   エディタ (editors)
   教育用ソフトウェア (education)
   電子ラボラトリ (electronic-lab)
   技術系と科学系 (engineering-and-scientific)
   FreeIPA Server (freeipa-server)
   ゲームと娯楽 (games)
   Headless Management (headless-management)
   LibreOffice (libreoffice)
   MATE Applications (mate-applications)
   Milkymist (milkymist)
   ネットワークサーバー (network-server)
   Neuron Modelling Simulators (neuron-modelling-simulators)
   Office/生産性 (office)
   Pantheon Desktop (pantheon-desktop)
   Python Classroom (python-classroom)
   Python Science (python-science)
   ロボット (robotics-suite)
   RPM 開発ツール (rpm-development-tools)
   セキュリティラボ (security-lab)
   サウンドとビデオ (sound-and-video)
   システムツール (system-tools)
   テキストベースのインターネット (text-internet)
   ウィンドウマネージャ (window-managers)

→日本語と英語のグループ名を確認できます。使うのは英語名が楽です。

-

わざと中断し、インストールされるパッケージを確認:
$ sudo dnf group install xfce-desktop-environment
:
グループパッケージ "xorg-x11-drv-armsoc" に一致するものはありません
依存関係が解決しました。
================================================================================
 パッケージ                        Arch   バージョン      リポジトリー    サイズ
================================================================================
group/moduleパッケージをインストール:
 fwupd                             x86_64 1.7.7-1.fc36    updates         1.9 M
 google-noto-naskh-arabic-vf-fonts noarch 20201206-9.fc36 fedora          103 k
 gstreamer1-plugin-openh264        x86_64 1.20.0-1.fc36   fedora-cisco-openh264
                                                                           25 k
 hplip                             x86_64 3.22.2-2.fc36   fedora           18 M
 ibus-hangul                       x86_64 1.5.4-8.fc36    fedora           68 k
 ibus-libpinyin                    x86_64 1.12.91-1.fc36  updates         917 k
 ibus-libzhuyin                    x86_64 1.10.0-4.fc36   fedora           10 M
 ibus-m17n                         x86_64 1.4.9-2.fc36    fedora           56 k
 lohit-marathi-fonts               noarch 2.94.2-14.fc36  fedora           52 k
 mpage                             x86_64 2.5.7-13.fc36   fedora           60 k

依存関係のインストール:
 flashrom                          x86_64 1.2-8.fc36      fedora          311 k
 gd                                x86_64 2.3.3-5.fc36    fedora          138 k
 hplip-common                      x86_64 3.22.2-2.fc36   fedora           73 k
 hplip-libs                        x86_64 3.22.2-2.fc36   fedora          170 k
 libaom                            x86_64 3.2.0-5.fc36    fedora          1.7 M
 libavif                           x86_64 0.9.3-3.fc36    fedora           76 k
 libdav1d                          x86_64 0.9.2-2.fc36    fedora          491 k
 libftdi                           x86_64 1.5-3.fc36      fedora           44 k
 libgcab1                          x86_64 1.4-6.fc36      fedora           77 k
 libgphoto2                        x86_64 2.5.29-1.fc36   fedora          1.3 M
 libhangul                         x86_64 0.1.0-25.fc36   fedora          1.9 M
 libieee1284                       x86_64 0.2.11-38.fc36  fedora           41 k
 libjaylink                        x86_64 0.2.0-4.fc36    fedora           38 k
 libjcat                           x86_64 0.1.10-1.fc36   fedora           77 k
 libjxl                            x86_64 0.6.1-9.fc36    fedora          1.0 M
 libpinyin                         x86_64 2.6.2-1.fc36    updates         199 k
 libpinyin-data                    x86_64 2.6.2-1.fc36    updates          13 M
 libsane-airscan                   x86_64 0.99.27-4.fc36  fedora          131 k
 libsmbios                         x86_64 2.4.3-5.fc36    fedora           98 k
 libvmaf                           x86_64 2.3.0-3.fc36    fedora          181 k
 libxmlb                           x86_64 0.3.7-1.fc36    fedora          116 k
 libzhuyin                         x86_64 2.6.2-1.fc36    updates         167 k
 mozilla-openh264                  x86_64 2.2.0-1.fc36    fedora-cisco-openh264
                                                                          428 k
 net-snmp-libs                     x86_64 1:5.9.1-14.fc36 fedora          744 k
 oniguruma                         x86_64 6.9.8-1.fc36    updates         217 k
 openh264                          x86_64 2.2.0-1.fc36    fedora-cisco-openh264
                                                                          423 k
 rav1e-libs                        x86_64 0.5.0-6.fc36    fedora          899 k
 sane-airscan                      x86_64 0.99.27-4.fc36  fedora           83 k
 sane-backends                     x86_64 1.1.1-3.fc36    fedora          943 k
 sane-backends-libs                x86_64 1.1.1-3.fc36    fedora           49 k
 svt-av1-libs                      x86_64 0.9.0-1.fc36    fedora          1.9 M

弱い依存関係のインストール:
 avahi-tools                       x86_64 0.8-15.fc36     fedora           40 k
 fwupd-efi                         x86_64 1.3-1.fc36      updates          45 k
 fwupd-plugin-flashrom             x86_64 1.7.7-1.fc36    updates          42 k
 fwupd-plugin-modem-manager        x86_64 1.7.7-1.fc36    updates          72 k
 fwupd-plugin-uefi-capsule-data    x86_64 1.7.7-1.fc36    updates         2.2 M
 jq                                x86_64 1.6-13.fc36     fedora          188 k
 jxl-pixbuf-loader                 x86_64 0.6.1-9.fc36    fedora           55 k
 sane-backends-drivers-cameras     x86_64 1.1.1-3.fc36    fedora           32 k
 sane-backends-drivers-scanners    x86_64 1.1.1-3.fc36    fedora          2.9 M
環境グループのインストール中:
 Xfce Desktop                                                                  
グループのインストール中:
 Administration Tools                                                          
 base-x                                                                        
 Core                                                                          
 Dial-up Networking Support                                                    
 Fonts                                                                         
 Guest Desktop Agents                                                          
 Hardware Support                                                              
 Input Methods                                                                 
 Multimedia                                                                    
 Common NetworkManager Submodules                                              
 Printing Support                                                              
 Standard                                                                      
 Xfce                                                                          
:
これでよろしいですか? [y/N]: N
操作が中断されました。

-

$ sudo dnf group install admin-tools
:
グループのインストール中:
 Administration Tools
:
これでよろしいですか? [y/N]: N
操作が中断されました。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----

11. 個人的によく使うアプリをインストール:

-

-


1). 「pluma」をインストール:

-

テキストエディタのMATE 標準の「pluma」をインストールしました。軽いだけでなく、gedit とほぼ同じ機能があり日付の挿入ができます。

-

インストール:
$ sudo dnf install pluma
:
インストール:
 pluma                       x86_64      1.26.0-2.fc36        fedora      579 k
依存関係のインストール:
 caja-schemas                x86_64      1.26.0-3.fc36        fedora      2.0 M
 gtksourceview4              x86_64      4.8.3-1.fc36         fedora      851 k
 libpeas-loader-python3      x86_64      1.32.0-1.fc36        fedora       21 k
 pluma-data                  noarch      1.26.0-2.fc36        fedora      2.1 M

-

確認:
$ dnf list pluma
:
インストール済みパッケージ
pluma.x86_64                        1.26.0-2.fc36                        @fedora
$ pluma --version
pluma - Version 1.26.0

-

-


2). 「featherpad」をインストール:

Lubuntu 標準の「featherpad」もインストールしました。
Markdown のテキストが見やすい色使いなのが特徴。開いていたタブを起動時に開くことができる設定も便利です。

-

インストール:
$ sudo dnf install featherpad
:
インストール:
 featherpad                x86_64       1.1.0-2.fc36         fedora       848 k
依存関係のインストール:
 libxkbcommon-x11          x86_64       1.4.0-1.fc36         fedora        22 k
 pcre2-utf16               x86_64       10.39-1.fc36.1       fedora       212 k
 qt-settings               noarch       36.0-1.fc36          fedora        11 k
 qt5-qtbase                x86_64       5.15.3-1.fc36        fedora       3.6 M
 qt5-qtbase-common         noarch       5.15.3-1.fc36        fedora        12 k
 qt5-qtbase-gui            x86_64       5.15.3-1.fc36        fedora       6.3 M
 qt5-qtsvg                 x86_64       5.15.3-1.fc36        fedora       186 k
 qt5-qtx11extras           x86_64       5.15.3-1.fc36        fedora        35 k
 xcb-util-image            x86_64       0.4.0-19.fc36        fedora        19 k
 xcb-util-keysyms          x86_64       0.4.0-17.fc36        fedora        14 k
 xcb-util-renderutil       x86_64       0.3.9-20.fc36        fedora        17 k
 xcb-util-wm               x86_64       0.4.1-22.fc36        fedora        31 k

-

確認:
$ featherpad --version
FeatherPad 1.1.0

-

-


3). 「audacious」をインストール:

-

使われるライブラリを確認:
$ dnf list | grep pulseaudio | grep @
:
pipewire-pulseaudio.x86_64                0.3.51-1.fc36                   @updates             
pulseaudio-libs.x86_64                        15.0-5.fc36                      @anaconda            
pulseaudio-libs-glib2.x86_64               15.0-5.fc36                      @anaconda            
xfce4-pulseaudio-plugin.x86_64          0.4.3-7.fc36                     @anaconda            

→「pulseaudio」の代わりに「pipewire-pulseaudio」が使われています。

-

インストール:
$ sudo dnf install audacious
:
インストール:
 audacious                     x86_64    4.1-4.fc36            fedora     261 k
依存関係のインストール:
 SDL2                          x86_64    2.0.22-2.fc36         updates    629 k
 ampache_browser               x86_64    1.0.3-4.fc36          fedora     178 k
 audacious-libs                x86_64    4.1-4.fc36            fedora     369 k
 audacious-plugins             x86_64    4.1-6.fc36            fedora     1.5 M
 libbs2b                       x86_64    3.1.0-28.fc36         fedora      28 k
 libdecor                      x86_64    0.1.0-2.fc36          fedora      42 k
 libmodplug                    x86_64    1:0.8.9.0-14.fc36     fedora     174 k
 libopenmpt                    x86_64    0.6.3-1.fc36          updates    627 k
 lirc-libs                     x86_64    0.10.0-34.fc36        fedora     126 k
 neon                          x86_64    0.32.2-4.fc36         fedora     130 k
 openal-soft                   x86_64    1.21.1-2.fc36         fedora     431 k
 pakchois                      x86_64    0.4-25.fc36           fedora      18 k
 qt5-qtdeclarative             x86_64    5.15.3-2.fc36         fedora     4.2 M
 qt5-qtmultimedia              x86_64    5.15.3-1.fc36         fedora     806 k
 soxr                          x86_64    0.1.3-11.fc36         fedora      83 k
弱い依存関係のインストール:
 gstreamer1-plugins-good-qt    x86_64    1.20.0-1.fc36         fedora      67 k

-

バージョンを確認:
$ audacious --version
Audacious 4.1 (Fedora package)

→バージョンは最新です。

-

アプリを起動:

アプリケーション →マルチメディア →「audacious」→「Audacious」画面

-

曲の登録:

ファイル →フォルダを開く →ホームの「音楽」を選んで →「開く」

→「音楽」フォルダにある曲が登録されました。

曲を選ぶと、再生されました。

-

再生中に別のファイルを開いたりすると、やっぱり途切れます。VirtualBox で使っているのも影響しているかも。

-

-


4). 「kolourpaint」をインストール:

ちょっとした画像加工に便利です。個人的には定番です。

画像ファイルを右クリックして起動することが多いです。

-

インストール:
$ sudo dnf install kolourpaint
:
インストール:
 kolourpaint                    x86_64 21.12.2-1.fc36             fedora  5.7 M
依存関係のインストール:
 breeze-icon-theme              noarch 5.91.0-1.fc36              fedora  4.1 M
 dbusmenu-qt5                   x86_64 0.9.3-0.28.20160218.fc36   fedora   79 k
 docbook-dtds                   noarch 1.0-79.fc36                fedora  282 k
 docbook-style-xsl              noarch 1.79.2-16.fc36             fedora  1.3 M
 dotconf                        x86_64 1.3-28.fc36                fedora   30 k
 espeak-ng                      x86_64 1.50-7.fc36                fedora  2.7 M
 gd                             x86_64 2.3.3-5.fc36               fedora  138 k
 gpgmepp                        x86_64 1.15.1-6.fc36              fedora  122 k
 kde-filesystem                 x86_64 4-67.fc36                  fedora   43 k
 kde-settings                   noarch 36.0-1.fc36                fedora   33 k
 kf5-filesystem                 x86_64 5.91.0-1.fc36              fedora   11 k
 kf5-karchive                   x86_64 5.91.0-1.fc36              fedora  106 k
 kf5-kauth                      x86_64 5.91.0-1.fc36              fedora  130 k
 kf5-kbookmarks                 x86_64 5.91.0-1.fc36              fedora  167 k
 kf5-kcodecs                    x86_64 5.91.0-1.fc36              fedora  179 k
 kf5-kcompletion                x86_64 5.91.0-1.fc36              fedora  136 k
 kf5-kconfig-core               x86_64 5.91.0-1.fc36              fedora  327 k
 kf5-kconfig-gui                x86_64 5.91.0-1.fc36              fedora   53 k
 kf5-kconfigwidgets             x86_64 5.91.0-1.fc36              fedora  433 k
 kf5-kcoreaddons                x86_64 5.91.0-1.fc36              fedora  471 k
 kf5-kcrash                     x86_64 5.91.0-1.fc36              fedora   38 k
 kf5-kdbusaddons                x86_64 5.91.0-1.fc36              fedora   87 k
 kf5-kdoctools                  x86_64 5.91.0-1.fc36              fedora  630 k
 kf5-kglobalaccel               x86_64 5.91.0-1.fc36              fedora   66 k
 kf5-kglobalaccel-libs          x86_64 5.91.0-1.fc36              fedora  105 k
 kf5-kguiaddons                 x86_64 5.91.0-2.fc36              fedora  111 k
 kf5-ki18n                      x86_64 5.91.0-2.fc36              fedora  1.7 M
 kf5-kiconthemes                x86_64 5.91.0-1.fc36              fedora  177 k
 kf5-kinit                      x86_64 5.91.0-1.fc36              fedora  174 k
 kf5-kio-core                   x86_64 5.91.0-1.fc36              fedora  610 k
 kf5-kio-core-libs              x86_64 5.91.0-1.fc36              fedora  467 k
 kf5-kio-doc                    noarch 5.91.0-1.fc36              fedora  2.5 M
 kf5-kio-file-widgets           x86_64 5.91.0-1.fc36              fedora  307 k
 kf5-kio-gui                    x86_64 5.91.0-1.fc36              fedora   91 k
 kf5-kio-ntlm                   x86_64 5.91.0-1.fc36              fedora   21 k
 kf5-kio-widgets                x86_64 5.91.0-1.fc36              fedora  255 k
 kf5-kio-widgets-libs           x86_64 5.91.0-1.fc36              fedora  423 k
 kf5-kitemviews                 x86_64 5.91.0-1.fc36              fedora  130 k
 kf5-kjobwidgets                x86_64 5.91.0-1.fc36              fedora  128 k
 kf5-knotifications             x86_64 5.91.0-1.fc36              fedora  167 k
 kf5-kservice                   x86_64 5.91.0-1.fc36              fedora  348 k
 kf5-ktextwidgets               x86_64 5.91.0-1.fc36              fedora  324 k
 kf5-kwallet                    x86_64 5.91.0-1.fc36              fedora  330 k
 kf5-kwallet-libs               x86_64 5.91.0-1.fc36              fedora   95 k
 kf5-kwidgetsaddons             x86_64 5.91.0-1.fc36              fedora  1.6 M
 kf5-kwindowsystem              x86_64 5.91.0-1.fc36              fedora  189 k
 kf5-kxmlgui                    x86_64 5.91.0-2.fc36              fedora  710 k
 kf5-libksane                   x86_64 21.12.2-1.fc36             fedora  228 k
 kf5-solid                      x86_64 5.91.0-1.fc36              fedora  389 k
 kf5-sonnet-core                x86_64 5.91.0-1.fc36              fedora  184 k
 kf5-sonnet-ui                  x86_64 5.91.0-1.fc36              fedora  166 k
 kolourpaint-libs               x86_64 21.12.2-1.fc36             fedora   31 k
 libaom                         x86_64 3.2.0-5.fc36               fedora  1.7 M
 libavif                        x86_64 0.9.3-3.fc36               fedora   76 k
 libdav1d                       x86_64 0.9.2-2.fc36               fedora  491 k
 libgphoto2                     x86_64 2.5.29-1.fc36              fedora  1.3 M
 libieee1284                    x86_64 0.2.11-38.fc36             fedora   41 k
 libjxl                         x86_64 0.6.1-9.fc36               fedora  1.0 M
 libsane-airscan                x86_64 0.99.27-4.fc36             fedora  131 k
 libvmaf                        x86_64 2.3.0-3.fc36               fedora  181 k
 pcaudiolib                     x86_64 1.1-9.fc36                 fedora   29 k
 polkit-qt5-1                   x86_64 0.114.0-3.fc36             fedora   85 k
 qt5-qtspeech                   x86_64 5.15.3-1.fc36              fedora   44 k
 qt5-qtwayland                  x86_64 5.15.3-2.fc36              updates 1.1 M
 rav1e-libs                     x86_64 0.5.0-6.fc36               fedora  899 k
 sane-airscan                   x86_64 0.99.27-4.fc36             fedora   83 k
 sane-backends                  x86_64 1.1.1-3.fc36               fedora  943 k
 sane-backends-libs             x86_64 1.1.1-3.fc36               fedora   49 k
 sgml-common                    noarch 0.6.3-58.fc36              fedora   54 k
 speech-dispatcher              x86_64 0.11.1-2.fc36              fedora  3.9 M
 speech-dispatcher-espeak-ng    x86_64 0.11.1-2.fc36              fedora   36 k
 svt-av1-libs                   x86_64 0.9.0-1.fc36               fedora  1.9 M
弱い依存関係のインストール:
 jxl-pixbuf-loader              x86_64 0.6.1-9.fc36               fedora   55 k
 media-player-info              noarch 23-10.fc36                 fedora   65 k
 qt5-qtspeech-speechd           x86_64 5.15.3-1.fc36              fedora   24 k
 sane-backends-drivers-cameras  x86_64 1.1.1-3.fc36               fedora   32 k
 sane-backends-drivers-scanners x86_64 1.1.1-3.fc36               fedora  2.9 M

kde アプリなので、インストールされるパッケージが多いのが難点ですが、使いやすいのでインストール。

-

バージョンの確認:
$ kolourpaint --version
kolourpaint 21.12.2

-

アプリを起動:

アプリケーション →「グラフィックス」→「Kolourpaint」→「Kolourpaint」画面

もしくは、

画像ファイルを右クリック→「別のアプリケーションで開く」→「Kolourpaint」→「選択」→「Kolourpaint」画面

-

-


5). PDFビューア「qpdfview」をインストール:

-

(1). インストールできるかの確認:
$ dnf list qpdfview*
:
利用可能なパッケージ
qpdfview-common.noarch             0.4.18-9.fc36             fedora
qpdfview-qt5.x86_64                0.4.18-9.fc36             fedora

Fedora 34 では「qpdfview」でインストールできましたが、現在のパッケージ名は「qpdfview-qt5」です。

-

(2). インストール:
$ sudo dnf install qpdfview-qt5
:
インストール:
 qpdfview-qt5           x86_64        0.4.18-9.fc36         fedora        455 k
依存関係のインストール:
 poppler-qt5            x86_64        22.01.0-3.fc36        fedora        210 k
 qpdfview-common        noarch        0.4.18-9.fc36         fedora        273 k

-

(3). 起動して確認:

アプリケーション →オフィス →「qpdfview (QT5)」

-

→インストール時のパッケージ名とアプリケーション名が変わっただけでソースの内容は変わりません。ソースに日本語の翻訳ファイルがあってもプロジェクトファイルから漏れているので、日本語化されません。

アプリをインストールしておき、本家のソースファイルを翻訳して、「qpdfview_ja.qm」と「help_ja.html」を配置してやれば日本語化できます。

-

(4). 念のため、「fedora qpdfview」で検索:

qpdfview-qt5-0.4.18-9.fc36 RPM for x86_64

-

(5). デスクトップファイルを確認:
$ cat /usr/share/applications/qpdfview-qt5.desktop
:
Icon=qpdfview
Exec=qpdfview-qt5 --unique %F

→アプリケーション名が違います。

-

(6). ファイルの配置を確認:
/usr/bin/qpdfview-qt5
/usr/share/applications/qpdfview-qt5.desktop
/usr/share/qpdfview/help_ja.html             ←(「しおり」版)
/usr/share/qpdfview/qpdfview_ja.qm        ←(置かれてません)

-

(7). ヘルプの日本語化、および、翻訳ファイルをiT で一般的な言い回しに修正:

-

1. ソースのダウンロード:

→「ファイルを保存する」

ダウンロードした「qpdfview-0.4.18.tar.gz」を右クリック→「ここで展開」

→ソースの日本語の翻訳ファイルは、初期の翻訳なので「ブックマーク」が「しおり」です。

~/ダウンロード/qpdfview-0.4.18/translations/qpdfview_ja.ts

-

2. パッチファイルの作成:
$ cd ~/ダウンロード/qpdfview-0.4.18/
$ featherpad qpdfview-ja.patch

↓ 内容を見やすくするために区切っていますが、区切りを無視して連続して、すべて貼り付けてください:

diff -Naur a/help/help_ja.html b/help/help_ja.html
--- a/help/help_ja.html
+++ b/help/help_ja.html
@@ -44,7 +44,7 @@ This file is additionally licensed under the Creative Commons Attribution-ShareA
         <li><a href="#edit">編集</a></li>
         <li><a href="#view">表示</a></li>
         <li><a href="#tabs">タブ</a></li>
-        <li><a href="#bookmarks">しおり</a></li>
+        <li><a href="#bookmarks">ブックマーク</a></li>
         <li><a href="#help">ヘルプ</a></li>
     </ol>
     <li><a href="#mainview">メインビュー</a></li>
@@ -87,13 +87,13 @@ This file is additionally licensed under the Creative Commons Attribution-ShareA
 
 <ul>
     <li><b>前ページ/次ページ/最初のページ/最後のページ</b> 文書の前のページ、次のページ、最初のページ、最後のページへ移動します。</li>
-    <li><b>指定ページへ跳ぶ...</b> 現在のタブに表示するページを入力するダイアログを開きます。</li>
-    <li><b>後ろに跳ぶ/前に跳ぶ</b> 表示されているページの履歴で前後に跳びます。</li>
+    <li><b>指定ページへジャンプ...</b> 現在のタブに表示するページを入力するダイアログを開きます。</li>
+    <li><b>後ろにジャンプ/前にジャンプ</b> 表示されているページの履歴で前後に飛びます。</li>
     <li><b>検索...</b>
 メインビューの下に検索ドックを開きます。そこに文字を入力すると、2秒後に自動的に検索が開始されます。また、リターンキーを押して手動で開始することもできます。リターンキーを押下する際に
 Shift キーも押しておくと、現在のタブだけではなく全てのタブに対して検索を行います
 (この挙動は、設定で拡張検索ドックが有効になっていると逆になります)。</li>
-    <li><b>前を検索/次を検索</b> 文書内の検索用語が出現する前の場所、次の場所に跳びます。</li>
+    <li><b>前を検索/次を検索</b> 文書内の検索用語が出現する前の場所、次の場所に飛びます。</li>
     <li><b>検索を取り消す</b> 現在実行中の検索を取り止め、検索ドックを閉じます。</li>
     <li><b>クリップボードにコピー</b> チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分のテキストや画像をコピーすることができます。</li>
     <li><b>註釈を追加</b> チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分に註釈を追加することができます。</li>
@@ -130,7 +130,7 @@ Shift キーも押しておくと、現在のタブだけではなく全ての
     <li><b>プレゼンテーション...</b> F12 を押すとプレゼンテーションモードになります。Home キーを押すと最初のページを、End
 キーを押すと最後のページを表示します。矢印キーの → と ↓、スペースキーと Page Down キーで次のページに移動します。矢印キーの ← と
 ↑、Back Space キーと Page Up キーで前のページに移動します。Ctrl
-キーを押しながらリターンキーを押すと、前に表示したページに跳びます。</li>
+キーを押しながらリターンキーを押すと、前に表示したページに飛びます。</li>
 </ul>
 
 <p><b>拡大率</b>は Ctrl + L
@@ -149,17 +149,17 @@ Shift キーも押しておくと、現在のタブだけではなく全ての
 <p>このメニューには、クリックすることで現在のタブとして表示できる全てのタブが、メニュー項目として表示されます。タブは中クリックで閉じることができます。最初の9個までのタブは、Alt
 キーを押しながら 1 〜 9 の数字キーを押すことで切り替えることもできます。</p>
 
-<h4><a name="bookmarks">しおり</a> <a href="#top">&uarr;</a></h4>
+<h4><a name="bookmarks">ブックマーク</a> <a href="#top">&uarr;</a></h4>
 
 <ul>
-    <li><b>前のしおり</b> 現在のページより前の直近のしおりに跳びます。</li>
-    <li><b>次のしおり</b> 現在のページより後の直近のしおりに跳びます。</li>
-    <li><b>しおりを付ける</b> 現在のファイルとページにしおりを追加します。</li>
-    <li><b>しおりを外す</b> 現在のファイルとページからしおりを削除します。</li>
-    <li><b>しおりを全て外す</b> 全てのしおりを削除します。</li>
+    <li><b>前のブックマーク</b> 現在のページより前の直近のブックマークに飛びます。</li>
+    <li><b>次のブックマーク</b> 現在のページより後の直近のブックマークに飛びます。</li>
+    <li><b>ブックマークを追加</b> 現在のファイルとページにブックマークを追加します。</li>
+    <li><b>ブックマークを削除</b> 現在のファイルとページからブックマークを削除します。</li>
+    <li><b>ブックマークを全て削除</b> 全てのブックマークを削除します。</li>
     <li><b>開く</b> 任意のファイルを現在のタブに開きます。タブが無い場合は新しいタブにファイルが開かれます。</li>
     <li><b>新規タブで開く</b> 新しいタブにファイルを開きます。</li>
-    <li><b>指定ページへ跳ぶ</b> 対象のファイルを既に開いている場合は、直接そのページに移動します。そうでない場合は新しいタブにファイルを開きます。</li>
+    <li><b>指定ページへジャンプ</b> 対象のファイルを既に開いている場合は、直接そのページに移動します。そうでない場合は新しいタブにファイルを開きます。</li>
 </ul>
 
 <h4><a name="help">ヘルプ</a> <a href="#top">&uarr;</a></h4>
diff -Naur a/translations/qpdfview_ja.ts b/translations/qpdfview_ja.ts
--- a/translations/qpdfview_ja.ts
+++ b/translations/qpdfview_ja.ts
@@ -278,7 +278,7 @@
     <message>
         <location filename="../sources/bookmarkdialog.cpp" line="39"/>
         <source>Bookmark</source>
-        <translation>しおり</translation>
+        <translation>ブックマーク</translation>
     </message>
     <message>
         <location filename="../sources/bookmarkdialog.cpp" line="48"/>
@@ -316,7 +316,7 @@
     <message>
         <location filename="../sources/bookmarkmenu.cpp" line="56"/>
         <source>&amp;Remove bookmark</source>
-        <translation>しおりを外す(&amp;R)</translation>
+        <translation>ブックマークを削除(&amp;R)</translation>
     </message>
 </context>
 <context>
@@ -324,7 +324,7 @@
     <message>
         <location filename="../sources/database.cpp" line="988"/>
         <source>Jump to page %1</source>
-        <translation>%1ページヘ跳ぶ</translation>
+        <translation>%1ページヘジャンプ</translation>
     </message>
 </context>
 <context>
@@ -577,7 +577,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="1609"/>
         <source>Jump to page</source>
-        <translation>指定ページへ跳ぶ</translation>
+        <translation>指定ページへジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="1609"/>
@@ -587,7 +587,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="2014"/>
         <source>Jump to page %1</source>
-        <translation>%1ページヘ跳ぶ</translation>
+        <translation>%1ページヘジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="2165"/>
@@ -627,7 +627,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="2398"/>
         <source>&amp;Edit bookmark</source>
-        <translation>しおりを編集(&amp;E)</translation>
+        <translation>ブックマークを編集(&amp;E)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="2815"/>
@@ -747,17 +747,17 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3180"/>
         <source>&amp;Jump to page...</source>
-        <translation>指定ページへ跳ぶ(&amp;J)...</translation>
+        <translation>指定ページへジャンプ(&amp;J)...</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3182"/>
         <source>Jump &amp;backward</source>
-        <translation>後ろに跳ぶ(&amp;B)</translation>
+        <translation>後ろにジャンプ(&amp;B)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3183"/>
         <source>Jump for&amp;ward</source>
-        <translation>前に跳ぶ(&amp;W)</translation>
+        <translation>前にジャンプ(&amp;W)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3185"/>
@@ -927,17 +927,17 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3246"/>
         <source>&amp;Previous bookmark</source>
-        <translation>前のしおり(&amp;P)</translation>
+        <translation>前のブックマーク(&amp;P)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3247"/>
         <source>&amp;Next bookmark</source>
-        <translation>次のしおり(&amp;N)</translation>
+        <translation>次のブックマーク(&amp;N)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3249"/>
         <source>&amp;Add bookmark</source>
-        <translation>しおりを付ける(&amp;A)</translation>
+        <translation>ブックマークを追加(&amp;A)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3261"/>
@@ -967,7 +967,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3461"/>
         <source>Book&amp;marks</source>
-        <translation>しおり(&amp;M)</translation>
+        <translation>ブックマーク(&amp;M)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3533"/>
@@ -978,7 +978,7 @@
         <location filename="../sources/mainwindow.cpp" line="2397"/>
         <location filename="../sources/mainwindow.cpp" line="3250"/>
         <source>&amp;Remove bookmark</source>
-        <translation>しおりを外す(&amp;R)</translation>
+        <translation>ブックマークを削除(&amp;R)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="2959"/>
@@ -998,7 +998,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3251"/>
         <source>Remove all bookmarks</source>
-        <translation>しおりを全て外す</translation>
+        <translation>ブックマークを全て削除</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3255"/>
@@ -1061,7 +1061,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3579"/>
         <source>&amp;Bookmarks</source>
-        <translation>しおり(&amp;B)</translation>
+        <translation>ブックマーク(&amp;B)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3590"/>
@@ -1086,12 +1086,12 @@
     <message>
         <location filename="../sources/pageitem.cpp" line="379"/>
         <source>Go to page %1.</source>
-        <translation>%1ページに跳びます。</translation>
+        <translation>%1ページに飛びます。</translation>
     </message>
     <message>
         <location filename="../sources/pageitem.cpp" line="383"/>
         <source>Go to page %1 of file &apos;%2&apos;.</source>
-        <translation>ファイル「%2」の%1ページに跳びます。</translation>
+        <translation>ファイル「%2」の%1ページに飛びます。</translation>
     </message>
     <message>
         <location filename="../sources/pageitem.cpp" line="391"/>
@@ -1548,7 +1548,7 @@
     <message>
         <location filename="../sources/settingsdialog.cpp" line="262"/>
         <source>Restore bookmarks:</source>
-        <translation>しおりを復元:</translation>
+        <translation>ブックマークを復元:</translation>
     </message>
     <message>
         <location filename="../sources/settingsdialog.cpp" line="265"/>
@@ -1950,12 +1950,12 @@
     <message>
         <location filename="../sources/shortcuthandler.cpp" line="262"/>
         <source>Skip backward</source>
-        <translation>後ろに跳ぶ</translation>
+        <translation>後ろにジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/shortcuthandler.cpp" line="266"/>
         <source>Skip forward</source>
-        <translation>前に跳ぶ</translation>
+        <translation>前にジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/shortcuthandler.cpp" line="270"/>
diff -Naur a/translations/qpdfview_ja.ts b/translations/qpdfview_ja.ts
--- a/translations/qpdfview_ja.ts
+++ b/translations/qpdfview_ja.ts
@@ -429,9 +429,8 @@
     <message>
         <location filename="../sources/helpdialog.cpp" line="48"/>
         <source>help.html</source>
-        <extracomment>Please replace by file name of localized help if available, e.g. &quot;help_fr.html&quot;.
-</extracomment>
-        <translation>help.html</translation>
+        <extracomment>Please replace by file name of localized help if available, e.g. &quot;help_fr.html&quot;.</extracomment>
+        <translation>help_ja.html</translation>
     </message>
     <message>
         <location filename="../sources/helpdialog.cpp" line="63"/>

→見やすくするために区切っていますが、無視して連続して、すべて貼り付けてください。

-

3. patch コマンドのインストール:

Fedora だとデフォルトでインストールされていません。

$ sudo dnf install patch
:
インストール:
 patch          x86_64          2.7.6-16.fc36             fedora          124 k

-

4. パッチファイルの適用:
$ cd ~/ダウンロード/qpdfview-0.4.18/

$ patch -p1 < qpdfview-ja.patch
patching file help/help_ja.html
patching file translations/qpdfview_ja.ts
patching file translations/qpdfview_ja.ts

-

(8). 「lrelease」のインストール:

-

1. インストール:
$ sudo dnf install qt5-linguist
:
インストール:
 qt5-linguist             x86_64       5.15.3-1.fc36         fedora       874 k
依存関係のインストール:
 cmake-filesystem         x86_64       3.22.2-1.fc36         fedora        18 k
 qt5-qttools-common       noarch       5.15.3-1.fc36         fedora        11 k

-

2. 置かれている場所を検索:
$ sudo find / -name "lrelease"
:
/usr/lib64/qt5/bin/lrelease

-

3. インストールされたかの確認:
$ /usr/lib64/qt5/bin/lrelease --help
Usage:
    lrelease [options] -project project-file
    lrelease [options] ts-files [-qm qm-file]
:

-

(9). 翻訳ファイルの変換:
$ cd ~/ダウンロード/qpdfview-0.4.18/translations/
$ /usr/lib64/qt5/bin/lrelease qpdfview_ja.ts

Updating 'qpdfview_ja.qm'...
    Generated 368 translation(s) (368 finished and 0 unfinished)
    Ignored 1 untranslated source text(s)

→ 368 件のメッセージを翻訳しました

-

(10). ファイルの配置:
$ sudo cp ~/ダウンロード/qpdfview-0.4.18/translations/qpdfview_ja.qm /usr/share/qpdfview/
$ sudo cp ~/ダウンロード/qpdfview-0.4.18/help/help_ja.html /usr/share/qpdfview/

-

(11). 「qpdfview-qt」を起動して確認:

アプリケーション →オフィス →「qpdfview (QT5)」

→メニューの「しおり」が「ブックマーク」に変わりました。ヘルプの目次の表示も日本語化されて、内容のメニューの項目名も「ブックマーク」になっています。

-

もし、「qpdfview-qt」パッケージの更新があり、日本語化が解除されても、ダウンロードしたフォルダをそのままにしておけば、項番「 10). ファイルの配置:」の実行だけで日本語化されます。

-

-


6). 「Notepadqq-OTE」をビルドしてインストール

テキストエディタです。Qt アプリです。

-

「Notepadqq-OTE」は、「Notepadqq」のフォーク(兄弟 ?)で、 独自のOTE (OpenTextEdit) というコンポーネントに、本来の「QtWebEngine」と入れ替えてあるのが特徴です。「Notepadqq」と見た目も挙動も同じですが、動作は軽く、いくつかの不具合も改修されています。

残念ながら現在、サイトは休止しています。

-

参考:

「Ubuntu 22.04 LTS」にて「Notepadqq」のOTE 版をビルドしてみた〈H145-3〉

-

(1). OTE 版の公式サイト

https://github.com/JuBan1/notepadqq

-

(2). ソースをダウンロード:

Download ZIP 」をクリック

→「ファイルを保存する」

-

→ファイルを作成した「~/ダウンロード/notepadqq/」フォルダに移動

-

(3). チェックサムの確認:
$ cd ~/ダウンロード/notepadqq/
$ sha256sum notepadqq-ote.zip
8c1b6969fe2841b2d929feedb0d6a2b087d61d3080c716455706e5ea26ebee92  notepadqq-ote.zip

-

(4). 「notepadqq-ote.zip」を右クリック→「ここで展開」

-

(5). ファイルの確認:
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ ls
CONTRIBUTING.md  README.md    configure  notepadqq.pro  support_files
COPYING          TODO.txt     doc        snap
Dockerfile       build-tools  images     src

-

(6). 「notepadqq」のビルドに必要なツールと依存をインストール:
$ sudo dnf update
:
依存関係が解決しました。
行うべきことはありません。
完了しました!

-

$ sudo dnf install qt5-qtbase-devel qt5-qttools-devel qt5-qtsvg-devel uchardet make
:
パッケージ uchardet-0.0.6-15.fc36.x86_64 は既にインストールされています。
パッケージ make-1:4.3-7.fc36.x86_64 は既にインストールされています。
:
インストール:
 qt5-qtbase-devel                     x86_64  5.15.3-1.fc36      fedora   3.1 M
 qt5-qtsvg-devel                      x86_64  5.15.3-1.fc36      fedora    26 k
 qt5-qttools-devel                    x86_64  5.15.3-1.fc36      fedora   185 k
依存関係のインストール:
 clang-libs                           x86_64  14.0.0-1.fc36      fedora    22 M
 clang-resource-filesystem            x86_64  14.0.0-1.fc36      fedora    13 k
 cmake                                x86_64  3.22.2-1.fc36      fedora   6.3 M
 cmake-data                           noarch  3.22.2-1.fc36      fedora   1.6 M
 cmake-rpm-macros                     noarch  3.22.2-1.fc36      fedora    17 k
 gcc-c++                              x86_64  12.0.1-0.16.fc36   fedora    13 M
 jsoncpp                              x86_64  1.9.5-2.fc36       fedora    98 k
 libX11-devel                         x86_64  1.7.3.1-2.fc36     fedora   940 k
 libXau-devel                         x86_64  1.0.9-8.fc36       fedora    13 k
 libglvnd-core-devel                  x86_64  1:1.4.0-2.fc36     fedora    18 k
 libglvnd-devel                       x86_64  1:1.4.0-2.fc36     fedora   156 k
 libglvnd-gles                        x86_64  1:1.4.0-2.fc36     fedora    32 k
 libstdc++-devel                      x86_64  12.0.1-0.16.fc36   fedora   2.3 M
 libxcb-devel                         x86_64  1.13.1-9.fc36      fedora   1.0 M
 mesa-libEGL-devel                    x86_64  22.0.2-2.fc36      updates   18 k
 perl-English                         noarch  1.11-486.fc36      fedora    19 k
 qt5-designer                         x86_64  5.15.3-1.fc36      fedora   161 k
 qt5-doctools                         x86_64  5.15.3-1.fc36      fedora   693 k
 qt5-qttools                          x86_64  5.15.3-1.fc36      fedora    41 k
 qt5-qttools-libs-designer            x86_64  5.15.3-1.fc36      fedora   2.7 M
 qt5-qttools-libs-designercomponents  x86_64  5.15.3-1.fc36      fedora   786 k
 qt5-qttools-libs-help                x86_64  5.15.3-1.fc36      fedora   156 k
 qt5-rpm-macros                       noarch  5.15.3-1.fc36      fedora   9.1 k
 rhash                                x86_64  1.4.2-2.fc36       fedora   185 k
 vulkan-headers                       noarch  1.3.204.0-1.fc36   fedora   886 k
 vulkan-loader-devel                  x86_64  1.3.204.0-1.fc36   fedora   9.1 k
 xorg-x11-proto-devel                 noarch  2021.5-2.fc36      fedora   262 k
弱い依存関係のインストール:
 compiler-rt                          x86_64  14.0.0-1.fc36      fedora   3.5 M
 libomp                               x86_64  14.0.0-2.fc36      fedora   940 k
 libomp-devel                         x86_64  14.0.0-2.fc36      fedora    29 k
ダウングレード:
 mesa-libEGL                          x86_64  22.0.2-2.fc36      updates  124 k
:
インストール    33 パッケージ
ダウングレード   1 パッケージ

追加:

$ sudo dnf install uchardet-devel
:
インストール:
 uchardet-devel        x86_64        0.0.6-15.fc36          fedora        9.5 k

-

(7). ビルド (./configure):
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ ./configure
:
checking for QT5 qmake... /usr/bin/qmake-qt5
checking for lrelease... /usr/bin/lrelease-qt5
checking for c++... /usr/bin/c++
checking whether c++ compiler builds test program... ok
checking whether c++ compiler supports -std=c++0x... ok
checking whether compiled test program works... ok
checking for make... /usr/bin/make
checking for pkg-config... /usr/bin/pkg-config
checking for Qt5Core library... -lQt5Core 
checking for Qt5Gui library... -lQt5Gui -lQt5Core 
checking for Qt5Network library... -lQt5Network -lQt5Core 
checking for Qt5Widgets library... -lQt5Widgets -lQt5Gui -lQt5Core 
checking for Qt5PrintSupport library... -lQt5PrintSupport -lQt5Widgets -lQt5Gui -lQt5Core 
checking for Qt5Svg library... -lQt5Svg -lQt5Widgets -lQt5Gui -lQt5Core 
checking for uchardet library... -luchardet 
generate Makefile... Info: creating stash file /home/ubn/ダウンロード/notepadqq/notepadqq-ote/.qmake.stash
done

→成功

-

上記のやり方だと、/usr/local/ にインストールされます:

-

(8). ビルド (make):
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ make
:
make[1]: ディレクトリ '/home/ubn/ダウンロード/notepadqq/notepadqq-ote/src/ui-tests' から出ます

→時間がかかります。

→成功

-

(9). インストール (make install):
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ sudo make install
:
/usr/lib/qt5/bin/qmake -install qinstall -exe /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/lib/notepadqq-bin /usr/local/lib/notepadqq/notepadqq-bin
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/16x16/apps/notepadqq.png /usr/local/share/icons/hicolor/16x16/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/22x22/apps/notepadqq.png /usr/local/share/icons/hicolor/22x22/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/24x24/apps/notepadqq.png /usr/local/share/icons/hicolor/24x24/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/32x32/apps/notepadqq.png /usr/local/share/icons/hicolor/32x32/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/48x48/apps/notepadqq.png /usr/local/share/icons/hicolor/48x48/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/64x64/apps/notepadqq.png /usr/local/share/icons/hicolor/64x64/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/96x96/apps/notepadqq.png /usr/local/share/icons/hicolor/96x96/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/128x128/apps/notepadqq.png /usr/local/share/icons/hicolor/128x128/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/256x256/apps/notepadqq.png /usr/local/share/icons/hicolor/256x256/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/512x512/apps/notepadqq.png /usr/local/share/icons/hicolor/512x512/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/scalable/apps/notepadqq.svg /usr/local/share/icons/hicolor/scalable/apps/notepadqq.svg
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/appdata/data /usr/local/share/notepadqq/data
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/appdata/extension_tools /usr/local/share/notepadqq/extension_tools
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/bin/notepadqq /usr/local/bin/notepadqq
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/shortcuts/notepadqq.desktop /usr/local/share/applications/notepadqq.desktop
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/notepadqq.appdata.xml /usr/local/share/metainfo/notepadqq.appdata.xml
chmod 755 "/usr/local/bin/notepadqq"
:
make[1]: ディレクトリ '/home/ubn/ダウンロード/notepadqq/notepadqq-ote/src/ui-tests' から出ます

→成功

-

$ notepadqq --version
Notepadqq 1.4.8

-

(10). 動作確認:

メニュー →開発 →「Notepadqq」

→メニューバーも日本語化されて、日本語入力もできます。ヘルプ表示の「閉じる」ボタンの表示も正常です。

OTE 版かを見分けるには、ヘルプで「software libraries:」の表示を確認します。

-

(11). フォントの変更:

設定→「環境設定…」→「外観」タブ

カラースキーマ: Default
Font Family:  →「MigMix 1M」に変更
Font Style: Regular
Font Size:  →「11pt」に変更

→「Apply」

→「OK」

-

(12). テーマの変更:

設定→「環境設定…」→「外観」タブ

カラースキーマ: Default →「Breeze Dark」に変更

→「Apply」

→「OK」

-

→カーソルの領域選択は水色でわかりやすいです。

-

-


7). 「LibreOffice」をインストール:

-

(1). インストールについての確認:
$ dnf list libreoffice*
:
利用可能なパッケージ
:

→インストールなし

$ dnf group info LibreOffice
:
グループ: LibreOffice
 説明: LibreOffice 統合オフィススイート
 必須なパッケージ:
   libreoffice-calc
   libreoffice-emailmerge
   libreoffice-graphicfilter
   libreoffice-impress
   libreoffice-writer
 オプション パッケージ:
   libreoffice-base
   libreoffice-draw
   libreoffice-math
   libreoffice-pyuno

-

(2). インストール:
$ sudo dnf install libreoffice-writer libreoffice-calc
:
インストール:
 libreoffice-calc             x86_64 1:7.3.3.2-1.fc36             updates 8.3 M
 libreoffice-writer           x86_64 1:7.3.3.2-1.fc36             updates 3.7 M
依存関係のインストール:
 Box2D                        x86_64 2.4.1-7.fc36                 fedora  109 k
 autocorr-en                  noarch 1:7.3.3.2-1.fc36             updates 112 k
 boost-chrono                 x86_64 1.76.0-11.fc36               updates  27 k
 boost-date-time              x86_64 1.76.0-11.fc36               updates  16 k
 boost-iostreams              x86_64 1.76.0-11.fc36               updates  41 k
 boost-locale                 x86_64 1.76.0-11.fc36               updates 218 k
 boost-thread                 x86_64 1.76.0-11.fc36               updates  58 k
 clucene-contribs-lib         x86_64 2.3.3.4-42.20130812.e8e3d20git.fc36
                                                                  fedora  103 k
 clucene-core                 x86_64 2.3.3.4-42.20130812.e8e3d20git.fc36
                                                                  fedora  563 k
 copy-jdk-configs             noarch 4.0-3.fc36                   fedora   27 k
 google-carlito-fonts         noarch 1.103-0.18.20130920.fc36     fedora  803 k
 gstreamer1-plugins-good-gtk  x86_64 1.20.0-1.fc36                fedora   33 k
 ht-caladea-fonts             noarch 1:1.001-6.20200428git336a529.fc36
                                                                  fedora  136 k
 hyphen-en                    noarch 2.8.8-17.fc36                fedora   47 k
 java-17-openjdk-headless     x86_64 1:17.0.3.0.7-1.fc36          updates  40 M
 javapackages-filesystem      noarch 6.0.0-7.fc36                 fedora   12 k
 libabw                       x86_64 0.1.3-7.fc36                 fedora  113 k
 libcmis                      x86_64 0.5.2-13.fc36                fedora  393 k
 libe-book                    x86_64 0.1.3-19.fc36                fedora  173 k
 libeot                       x86_64 0.01-18.fc36                 fedora   37 k
 libepubgen                   x86_64 0.1.1-9.fc36                 fedora  142 k
 libetonyek                   x86_64 0.1.10-3.fc36                fedora  736 k
 libexttextcat                x86_64 3.4.6-2.fc36                 fedora  224 k
 liblangtag                   x86_64 0.6.3-9.fc36                 fedora   76 k
 liblangtag-data              noarch 0.6.3-9.fc36                 fedora  196 k
 libmwaw                      x86_64 0.3.21-2.fc36                fedora  2.5 M
 libnumbertext                x86_64 1.0.10-1.fc36                updates 216 k
 libodfgen                    x86_64 0.1.8-4.fc36                 fedora  270 k
 liborcus                     x86_64 0.17.2-1.fc36                fedora  540 k
 libreoffice-core             x86_64 1:7.3.3.2-1.fc36             updates 111 M
 libreoffice-data             noarch 1:7.3.3.2-1.fc36             updates 654 k
 libreoffice-langpack-en      x86_64 1:7.3.3.2-1.fc36             updates 101 k
 libreoffice-opensymbol-fonts noarch 1:7.3.3.2-1.fc36             updates 152 k
 libreoffice-pdfimport        x86_64 1:7.3.3.2-1.fc36             updates 243 k
 libreoffice-pyuno            x86_64 1:7.3.3.2-1.fc36             updates 368 k
 libreoffice-ure              x86_64 1:7.3.3.2-1.fc36             updates 2.3 M
 libreoffice-ure-common       noarch 1:7.3.3.2-1.fc36             updates 1.6 M
 libreoffice-x11              x86_64 1:7.3.3.2-1.fc36             updates 241 k
 librevenge                   x86_64 0.0.4-22.fc36                fedora  228 k
 libstaroffice                x86_64 0.0.7-5.fc36                 fedora  815 k
 libwpd                       x86_64 0.10.3-10.fc36               fedora  245 k
 libwpg                       x86_64 0.3.3-8.fc36                 fedora   71 k
 libwps                       x86_64 0.4.12-4.fc36                fedora  874 k
 lksctp-tools                 x86_64 1.0.18-12.fc36               fedora   91 k
 lpsolve                      x86_64 5.5.2.0-28.fc36              fedora  519 k
 lua                          x86_64 5.4.4-1.fc36                 fedora  189 k
 lua-posix                    x86_64 35.1-1.fc36                  fedora  131 k
 mariadb-connector-c          x86_64 3.2.6-1.fc36                 fedora  197 k
 mariadb-connector-c-config   noarch 3.2.6-1.fc36                 fedora  9.7 k
 mythes                       x86_64 1.2.4-18.fc36                fedora   18 k
 mythes-en                    noarch 3.0-33.fc36                  fedora  3.0 M
 raptor2                      x86_64 2.0.15-32.fc36               fedora  211 k
 rasqal                       x86_64 0.9.33-18.fc36               fedora  280 k
 redland                      x86_64 1.0.17-29.fc36               fedora  170 k
 tzdata-java                  noarch 2022a-2.fc36                 updates 156 k
 xmlsec1-nss                  x86_64 1.2.33-2.fc36                fedora   78 k
 yajl                         x86_64 2.1.0-18.fc36                fedora   38 k
 zxing-cpp                    x86_64 1.2.0-4.fc36                 updates 628 k
弱い依存関係のインストール:
 libreoffice-gtk3             x86_64 1:7.3.3.2-1.fc36             updates 560 k
 libreoffice-help-en          x86_64 1:7.3.3.2-1.fc36             updates 2.9 M

または、

$ sudo dnf group install LibreOffice

-

(3). 日本語化のインストール:
$ sudo dnf install libreoffice-langpack-ja libreoffice-help-ja
:
インストール:
 libreoffice-help-ja               x86_64   1:7.3.3.2-1.fc36    updates   5.0 M
 libreoffice-langpack-ja           x86_64   1:7.3.3.2-1.fc36    updates   821 k
依存関係のインストール:
 autocorr-ja                       noarch   1:7.3.3.2-1.fc36    updates    81 k
 langpacks-core-font-ja            noarch   3.0-21.fc36         fedora    9.7 k
 langpacks-core-ja                 noarch   3.0-21.fc36         fedora    9.7 k
弱い依存関係のインストール:
 glibc-langpack-ja                 x86_64   2.35-5.fc36         updates   355 k
 google-noto-serif-cjk-ttc-fonts   noarch   20201206-4.fc36     fedora    108 M
 langpacks-ja                      noarch   3.0-21.fc36         fedora    9.8 k
 man-pages-ja                      noarch   20200315-5.fc36     fedora    5.5 M

-

(4). 確認:
$ dnf list libreoffice* --installed
:
インストール済みパッケージ
libreoffice-calc.x86_64                      1:7.3.3.2-1.fc36           @updates
libreoffice-core.x86_64                      1:7.3.3.2-1.fc36           @updates
libreoffice-data.noarch                      1:7.3.3.2-1.fc36           @updates
libreoffice-gtk3.x86_64                      1:7.3.3.2-1.fc36           @updates
libreoffice-help-en.x86_64                   1:7.3.3.2-1.fc36           @updates
libreoffice-help-ja.x86_64                   1:7.3.3.2-1.fc36           @updates
libreoffice-langpack-en.x86_64               1:7.3.3.2-1.fc36           @updates
libreoffice-langpack-ja.x86_64               1:7.3.3.2-1.fc36           @updates
libreoffice-opensymbol-fonts.noarch          1:7.3.3.2-1.fc36           @updates
libreoffice-pdfimport.x86_64                 1:7.3.3.2-1.fc36           @updates
libreoffice-pyuno.x86_64                     1:7.3.3.2-1.fc36           @updates
libreoffice-ure.x86_64                       1:7.3.3.2-1.fc36           @updates
libreoffice-ure-common.noarch                1:7.3.3.2-1.fc36           @updates
libreoffice-writer.x86_64                    1:7.3.3.2-1.fc36           @updates
libreoffice-x11.x86_64                       1:7.3.3.2-1.fc36           @updates

-

-


8). 任意: 使わないアプリを削除:

残しても良いですが、資源の無駄です。

-

オフィス「gnumeric」を削除:
$ sudo dnf remove gnumeric
:
削除中:
 gnumeric        x86_64        1:1.12.52-1.fc36          @updates          37 M
未使用の依存関係の削除:
 goffice         x86_64        0.10.52-1.fc36            @updates         8.2 M
 lasem           x86_64        0.4.3-17.fc36             @anaconda        851 k

-

-


9). 任意: 使わないフォントを削除:

-

その 1:
$ sudo dnf remove lohit-assamese-fonts lohit-bengali-fonts lohit-devanagari-fonts lohit-gujarati-fonts lohit-kannada-fonts lohit-odia-fonts lohit-tamil-fonts lohit-telugu-fonts
:
削除しました:
  lohit-assamese-fonts-2.91.5-12.fc35.noarch       ←アッサム語
  lohit-bengali-fonts-2.91.5-12.fc35.noarch        ←ベンガル語
  lohit-devanagari-fonts-2.95.5-2.fc35.noarch      ←デバナガリ語
  lohit-gujarati-fonts-2.92.4-12.fc35.noarch       ←グジャラート語
  lohit-kannada-fonts-2.5.4-11.fc35.noarch         ←カンナダ語
  lohit-odia-fonts-2.91.2-12.fc35.noarch           ←インド Odia 語
  lohit-tamil-fonts-2.91.3-12.fc35.noarch          ←タミル語
  lohit-telugu-fonts-2.5.5-11.fc35.noarch          ←テルグ語

-

その 2:
$ sudo dnf remove google-noto-sans-sinhala-vf-fonts
:
削除しました:
  google-noto-sans-sinhala-vf-fonts-20201206-3.fc35.noarch ←スリランカのシンハラ語

-

その 3:
$ sudo dnf remove aajohan-comfortaa-fonts jomolhari-fonts khmeros-base-fonts khmeros-fonts-common sil-abyssinica-fonts sil-padauk-fonts sil-mingzat-fonts sil-nuosu-fonts smc-meera-fonts thai-scalable-fonts-common thai-scalable-waree-fonts
:
削除しました:
  aajohan-comfortaa-fonts-3.101-3.fc35.noarch      ←ベトナム語
  jomolhari-fonts-0.003-34.fc35.noarch             ←チベット文字
  khmer-os-system-fonts-5.0-34.fc35.noarch         ←クメール語(カンボジア語)
  sil-abyssinica-fonts-1.200-22.fc35.noarch        ←エチオピア
  sil-mingzat-fonts-1.000-5.fc35.noarch            ←ビルマ
  sil-nuosu-fonts-2.200-3.fc35.noarch              ←南アジアのLepcha 言語
  sil-padauk-fonts-3.003-8.fc35.noarch             ←中国南西部の大規模な民族
  smc-meera-fonts-7.0.3-4.fc35.noarch              ←マラヤーラム語
  thai-scalable-fonts-common-0.7.2-4.fc35.noarch   ←タイ語
  thai-scalable-waree-fonts-0.7.2-4.fc35.noarch    ←タイ語

-


最終確認:

$ dnf list *fonts* --installed

→せっかく削除しても、システム更新で復活する可能性があります。

-

-


10). テキストエディタの「Geany」がインストールされていました:

開発ツールをインストールしたときに依存で入ったのかも。

-

起動:

メニュー →開発 →「Geany」

-

IDE なので、テキストエディタとして使うには、余計なウィンドウを消します:

表示→「メッセージウィンドウを表示」のチェックを外しました。

「サイドバーを表示」のチェックを外しました。

-

他のテーマを使えるようにする準備:

表示→「色の設定」→「Alternate」

デフォルトと同じテーマなので、画面の変化はありませんが、設定することで、テーマの管理フォルダが作成されるので、テーマを追加しやすくなります。

-


Geany Themes ダウンロード:

Geany Themes

-

Geanyのテーマを使うには、confファイルをダウンロード、

そのときに保存先として、「~/.config/geany/colorschemes/」フォルダを指定すると楽です:

-

下記のリンクを右クリック →「名前をつけてンク先を保存…」

→その他の場所→「Ctrl+H」→Home→あなたのユーザ名→「.config/geany/colorschemes/」を指定:

-

Monokai

Oblivion 2

Delt Dark

-

テーマの変更:

表示→「色の設定」→「Oblivion 2」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- -----

12. ゲームのインストール:

-


1). 「マインスイーパ」:

A classic Minesweeper game

-

インストール:
$ sudo dnf install kmines
:
インストール:
 kmines                 x86_64       21.12.2-1.fc36          fedora       1.0 M
依存関係のインストール:
 kf5-attica             x86_64       5.91.0-1.fc36           fedora       171 k
 kf5-kdeclarative       x86_64       5.91.0-2.fc36           fedora       325 k
 kf5-kdnssd             x86_64       5.91.0-1.fc36           fedora        98 k
 kf5-knewstuff          x86_64       5.91.0-1.fc36           fedora       821 k
 kf5-kpackage           x86_64       5.91.0-1.fc36           fedora       213 k
 libkdegames            x86_64       21.12.2-1.fc36          fedora       8.7 M

-

実行時の画面:

-


2). 「ソリティア」(クロンダイク

A collection of card games

-

インストール:
$ sudo dnf install aisleriot
:
インストール:
 aisleriot         x86_64         1:3.22.21-1.fc36         fedora         6.2 M
依存関係のインストール:
 guile30           x86_64         3.0.7-5.fc36             fedora         8.1 M

-

実行時の画面:

-


3). 「四川省」 (Shisen-Sho):

-

インストール:
$ sudo dnf install kshisen
:
インストール:
 kshisen                 x86_64       21.12.2-1.fc36         fedora       1.1 M
依存関係のインストール:
 libkmahjongg            x86_64       21.12.2-1.fc36         fedora        45 k
 libkmahjongg-data       noarch       21.12.2-1.fc36         fedora       2.0 M

-

実行時の画面:

→最初の起動時に渓谷メッセージが2つ表示されますが、その後は出ません。

-


4). 「上海」 (KMahjongg):

インストール:
$ sudo dnf install kmahjongg
:
インストール:
 kmahjongg         x86_64         21.12.2-1.fc36           fedora         4.1 M

-

実行時の画面:

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- -

-

13. Xfce パネルのカスタマイズ:

-


1). パネルにアプリの「ランチャー」を追加:

-

画面の上のパネルバーの空きで右クリック →パネル →パネルの設定

「パネル 1」を選んでおきます。

「表示」タブ

寸法

行サイズ: 26 →「24」に変更

-

「アイテム」タブ

→「ランチャー」を4つ追加しました:

各「ランチャー」を選び、「上矢印」ボタンを押して移動

パネルの左端の使いやすい位置に移動しました。

- ランチャー(Firefox ウェブ・ブラウザ) ★追加
- ランチャー(thunar ファイルマネージャ) ★追加
- ランチャー(Xfce4 Terminal 端末)  ★追加
- ランチャー(Featherpad)、(Mousepad)、(Pluma) ★追加(複数を登録)

→「ランチャー」に複数のアプリを登録すると、1番上がデフォルトで、以降はメニュー選択できます:

-

→うまく使うと、設定の並びを変えるだけで、デフォルトのアプリを変更できるので便利です。

-


2). 上のパネルの右にある時計の変更:

パネルの時計を右クリック →プロパティ

時計のオプション

表示形式: 「カスタム」を選択

%m/%d (%a) %H:%M

→「閉じる」

-

→05/08 (日) 17:08

-

-


3). ファイルマネージャ「thunar」にて、表示されるファイルの日付の書式を変更:

ファイルマネージャ(thunar) を起動 →編集 →設定

「表示」タブ

日付

形式: 今日 →「2022-05-08 17:57:19」に変更

-

-


4). ショートカットキーの設定(ウィンドウ画面のタイル動作):

  • ウィンドウのタイトルバーをマウスでつかんで、上下左右、および 4隅にぶつけることで、タイル表示ができます。

Cinnamon 並みに 8 パターンが可能です。ゆっくりぶつけると、ワークスペースの移動になります。

-

操作が楽になる、ショートカットキーの登録を行いました:

-

覚えやすい位置に割り当てました:

-

ウィンドウ画面をタイリングする位置とテンキー部の数字の位置が対応: 

7(左上  ) 8(上半分) 9(右上 )
4(左半分 ) 5(  x  ) 6(右半分)
1(左下  ) 2(下半分) 3(右下 )

→例えば、Windows+テンキーの「6」: 「右半分」に移動。

-

設定:

-

メニュー →設定 →「ウィンドウマネージャー」→「キーボード」タブ

-

「デフォルトに戻す」をクリック →「はい」

-

「ウィンドウを画面…」の行をダブルクリックすると、キー入力待ちになるので、

Windows」キーを押しながら、テンキー部のキー(1〜9)を押します。

-

ちなみに、「Super」キーは「Windows」キーのことです。

テンキーの1〜9(KP_xxx)が画面の位置となるように修正します:

-

デフォルトの値:

ウィンドウを画面上… にタイル表示  Super+Up
ウィンドウを画面下… にタイル表示  Super+KP_Up
ウィンドウを画面左… にタイル表示  Super+KP_Left
ウィンドウを画面右… にタイル表示  Super+KP_Right
ウィンドウを画面左上…にタイル表示  Super+KP_Home
ウィンドウを画面右上…にタイル表示  Super+KP_Page_Up
ウィンドウを画面左下…にタイル表示  Super+KP_End
ウィンドウを画面右下…にタイル表示  Super+KP_Next (KP_Page_Down) 
ディスクトップを表示         Super+D

↓ 下記のように修正:

ウィンドウを画面上… にタイル表示  Super+KP_Up   ★
ウィンドウを画面下… にタイル表示  Super+KP_Down  ★
ウィンドウを画面左… にタイル表示  Super+KP_Left
ウィンドウを画面右… にタイル表示  Super+KP_Right
ウィンドウを画面左上…にタイル表示  Super+KP_Home
ウィンドウを画面右上…にタイル表示  Super+KP_Page_Up
ウィンドウを画面左下…にタイル表示  Super+KP_End
ウィンドウを画面右下…にタイル表示  Super+KP_Next (KP_Page_Down) 
ディスクトップを表示         Super+D

→登録時に、上記と違う文字列が表示されたときは、再度同じキーで登録をやり直します。

-

→「閉じる」

-

ちなみに、

firefox」ブラウザと「mousepad」は、ウィンドウサイズと位置を記憶しています。

firefox」ブラウザが1/2 画面サイズで左、「mousepad」は1/4 画面サイズで右の上、としておいて、
「端末」を起動すると、画面中央に表示されます。

-

「端末」のウィンドウを選んでおいて、(Window)+ テンキーの「3」を押すと、
「端末」のウィンドウが自動的に 1/4 のサイズに調整され、右下に移動します。
→これが「タイル表示」の動きです。

-

-


5). メニューの「アプリケーション」ボタン名を省略:

メニューの「アプリケーション」ボタンを右クリック→プロパティ

ボタンタイトル: 「アプリケーション」→「半角スペース x2個」

→「閉じる」

-

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- --

-

14. 参考: 画面下にあるドック(xfce のパネル2)を右側に移動:

-

パネル2 を画面右側に移動:

  • パネル1 にランチャーを登録したので、しばらく様子を見て、不要なら消すかもしれません。

-

画面下にあるドック(パネル2)の空きで右クリック →パネル →「パネルの設定…」→「パネルの設定」画面

-

「表示」タブ

「パネルをロックする」のチェックを外します

-

モード: 水平→「垂直」に変更

パネルが縦になるので、一番上にある横棒をつかんで、画面右端に移動

行サイズ: 48 →「38」に変更       ←(少し小さくしました)

-

「パネルをロックする」にチェック

→「閉じる」

-

画面:

→画面右側にあるのが「パネル2」です。小さくしたので邪魔しません。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- ---

-

15. フォントのインストール:

-

個人的によく使っているフォントを、インストールしました。

-

-


1). テキストエディタ用に「MiguMix」フォントをインストール

パッケージに次のフォントを含みます:

-

$ dnf search migmix
:
一致する項目はありませんでした。

Fedoraリポジトリには登録がありません。

-

Ubuntuリポジトリからパッケージを持ってくることにしました:

→「フォント」なので、気にしないでインストールできます。

-

(1). 使用するツールがインストールされているか確認:
$ dnf list curl dpkg
:
curl.x86_64                        7.82.0-4.fc36                        @updates
利用可能なパッケージ
dpkg.x86_64                        1.21.7-1.fc36                        updates 

→別の目的で「curl」はインストール済み

-

(2). 足りないツールをインストール:
$ sudo dnf install dpkg
 :
 インストール:
 dpkg          x86_64          1.21.7-1.fc36             updates          1.5 M

→「dpkg」コマンドは 、debian 系のパッケージである「deb」ファイルを取り扱うツールです。

-

(3). フォント(パッケージ)のダウンロード:
$ mkdir -p ~/ダウンロード/fonts
$ curl http://archive.ubuntu.com/ubuntu/pool/universe/f/fonts-migmix/fonts-migmix_20200307-1_all.deb --output ~/ダウンロード/fonts/fonts-migmix_20200307-1_all.deb
 
$ ls  ~/ダウンロード/fonts/
fonts-migmix_20200307-1_all.deb

-

(4). フォントのインストール:
$ sudo dpkg -i ~/ダウンロード/fonts/fonts-migmix_20200307-1_all.deb
:
.../fonts-migmix_20200307-1_all.deb を展開する準備をしています ...
fonts-migmix (20200307-1) を展開しています...
fonts-migmix (20200307-1) を設定しています ...

-

(5). インストールされているパッケージ一覧を表示:
$ dpkg -l  --no-pager
:
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前           バージョン   アーキテクチ 説明
+++-==============-============-============-========================================
ii  fonts-migmix   20200307-1   all          High quality Japanese font based on M+ fonts and IPA fonts

→「-l」は小文字のエルです。「--no-pager」はエラー回避するために付加。

-

(6). 反映されないときは、「再起動」します:
$ reboot

-

-

参考: dpkg コマンドの使い方:

-

deb パッケージをインストール:
$ sudo dpkg -i <.deb ファイル名>

-

deb パッケージを削除:
$ sudo dpkg -r <パッケージ名>

-

deb パッケージを設定ファイル含め完全に削除:
$ sudo dpkg -P <パッケージ名>

-

-


2). 源ノ角ゴシック Code JP (Source Han Code JP) をインストール:

  • 「noto-fonts-cjk」フォントは万能ですが、プログラムコードの表示には向きません。

  • 通常、日本語と英数字は「1 : 2」の幅のフォントがほとんどです。こちらのフォントは、日本語と英数字が「2 : 3」の変則的な等幅フォントとして作られています。

→日本語と英数字が混ざっていてもバランスが良くて見やすいので、テキストエディタで使うのに向いています。

  • Manjaro Linux でインストールするには、AUR の「otf-source-han-code-jp」にてインストールできます。
    UbuntuFedora では、リポジトリに登録がないのでダウンロードが必要です。

-

(1). 源ノ角ゴシック Code JP (Source Han Code JP) をダウンロード:

GitHub: Fonts version 2.012R (OTF, OTC)

SourceHanCodeJP.ttc よりダウンロードしました。

-

(2). 「~/ダウンロード/fonts/」に移動
$ ls -1 ~/ダウンロード/fonts/
SourceHanCodeJP.ttc
fonts-migmix_20200307-1_all.deb

-

(3). システム全体で使えるようにインストール:

-

ディレクトリの準備:
$ ls /usr/local/share/
applications  info  man

$ sudo mkdir -p /usr/local/share/fonts
$ ls /usr/local/share/
applications  fonts  info  man

-

インストール:
$ cd ~/ダウンロード/fonts/
$ sudo cp SourceHanCodeJP.ttc /usr/local/share/fonts/

→「源ノ角ゴシック Code JP」フォントが使えるようになりました。

-

(4). 反映されないときは、「再起動」します:
$ reboot

-

-


まとめ

-

Fedora」を使う利点:

  • カーネルが新しいこと(新しいプロセッサやドライバに対応しやすい)
  • インストールするアプリのバージョンが新しいこと
  • CentOS に比べるとリポジトリ管理で苦労しないこと
  • firefox」ブラウザの起動が「Ubuntu」のsnap よりも速いこと
  • 壁紙を含めたデザインがクール

-

Fedora 36 Xfce」を使う利点:

  • 軽いこと
  • 高機能で安定していること
  • 「Wayland」ではなく、「x11」で動作していること
  • 個人的に使い慣れていること

-

Fedora」の不利なところ:

  • RHEL のための先駆者なので、リスクが高いこと
  • 使用するパッケージ名が Debian 系とは違うこと

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

VirtualBox に「Xubuntu 22.04 LTS」をインストール〈H137-3〉

登録日: 2022-04-30 更新日: 2022-05-07

UEFI 立ち上げのPCに、安定版の「Xubuntu 20.04.4 LTS」をインストール設定 して使っています。

-

そのホストOS の「VirtualBox」に、公開された ばかりの「Xubuntu 22.04 LTS」をインストールしました。その備忘録です。

-

ホストOS : Xubuntu 20.04.4 LTS

ゲストOS : Xubuntu 22.04 LTS   ←(今回の作業)

-

-

使用したPC は「ASUS Chromebox CN60 」で、 プロセッサは第4世代の「Intel Celeron 2955U 」です。UEFI 立ち上げです。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック

-

-


目次

-

以前の作業:

ホストOS に「VirtualBox をインストール」

-

今回の作業:

「ISO イメージをダウンロード:」

「仮想マシンの作成:」

「Xubuntu 22.04 のインストール」

「Xubuntu 22.04 をインストールし直す場合」

「日本語入力:」

「フォントとアプリのインストール」

「まとめ へ」

-

「目次詳細 へ」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -

Xubuntu 22.04」の画面:

-

半分のサイズの画面で表示:

→ホストOS の「Xubuntu 20.04.4 LTS」(木目の壁紙)にて、「Xubuntu 22.04 LTS」を起動しているところ。

こうすることで、両方を活用できます。

Xubuntu 22.04 LTS」のパネルは上側でデフォルトのままです。ホストOS のパネルは、画面下です。

-

全画面で表示:

→デフォルトの壁紙はクセが強いので、別の壁紙に変えてみました。

黒のパネルがあるのみのデザインなので、壁紙で雰囲気はガラッと変わります。

-

Xubuntu について:

  • Xubuntu は、Ubuntu の公式フレーバーで、 Ubuntu ベースの、軽量な「Xfce」デスクトップ環境です。

-

今までとの違い:

  →セッションのバックアップと復元、プラグインのサポート(gspell プラグインの追加)。
   個人的には「日時の挿入」プラグインがほしいのですが、今は「スペルチェック」だけです。

  • 画像ビューア「Ristretto 0.12.2」:

  →サムネイルのサポートを改善、パフォーマンスを大幅に改善

  • パネルのメニュー「Whisker Menu Plugin 2.7.1」:

  →テーマ開発者向けのいくつかの新しい設定とCSSクラスでカスタマイズオプションを拡張。
   設定メニューの位置が少し変更されています。

  →Snap パッケージになりました。
   起動するまでがすごく遅く、クリックしなかったと思い、つい、2重に起動させます。

  • 新しい「壁紙」:

  →コミュニティから 6つが選ばれたみたい。

-

参考: 「Firefox」の起動時間を新旧で比較(大まかな目安):

1) 前準備:

  (1). 「Firefox」を「前回のウィンドウとタブを開く」に設定

  (2). 「こちら 」のページだけを開いておいて、「Firefox」を閉じます。

  (3). システムをシャットダウン

  (4). システムを起動

-

2). 「Firefox」を起動させます。

Firefox」が起動して、開いていたページが操作できるようになるまでの時間:

- Xubuntu 20.04.4 LTS:   8 秒
- Xubuntu 22.04 LTS:    34 秒

Xubuntu 22.04 LTS」はVirtualbox 上で動いているというハンデはありますが、それでも遅すぎます。
一度起動すれば違いは出ませんが、個人的には「Firefox」をまず起動するので、「システムの起動が遅くなった」のと同じことです。

-

Xubuntu 20.04.4 LTS:

$ snap list
Name               Version                     Rev    Tracking       Publisher   Notes
bare               1.0                         5      latest/stable  canonical✓  base
core               16-2.54.4                   12834  latest/stable  canonical✓  core
core18             20220309                    2344   latest/stable  canonical✓  base
core20             20220329                    1434   latest/stable  canonical✓  base
gnome-3-28-1804    3.28.0-19-g98f9e67.98f9e67  161    latest/stable  canonical✓  -
gnome-3-38-2004    0+git.1f9014a               99     latest/stable  canonical✓  -
gtk-common-themes  0.1-59-g7bca6ae             1519   latest/stable  canonical✓  -
snapd              2.55.3                      15534  latest/stable  canonical✓  snapd

-

Xubuntu 22.04 LTS:

$ snap list
Name               Version          Rev    Tracking         Publisher   Notes
bare               1.0              5      latest/stable    canonical✓  base
core20             20220329         1434   latest/stable    canonical✓  base
firefox            100.0-2          1300   latest/stable/…  mozilla✓    -
gnome-3-38-2004    0+git.1f9014a    99     latest/stable/…  canonical✓  -
gtk-common-themes  0.1-79-ga83e90c  1534   latest/stable/…  canonical✓  -
snapd              2.55.3           15534  latest/stable    canonical✓  snapd

→「firefox」があることに注目。

-

参考: ちなみに、「Firefox」の起動時間を Virtualbox の「Fedora 36 Xfce 」でも確認:

→「17 秒」でした。

-

BIOS 立ち上げのPC では大きな変化

参考:

Ubuntu 21.10 その30 - インストーラーの仕様が変わる・BIOS環境でもEFIシステムパーティションが必要に

EFI 立ち上げのPC が主流。時代の流れですね。

-


現在のバージョンを表示:

-

ホストOS : Xubuntu 20.04.4 LTS

2022-04-30 現在

カーネル:

$ uname -r
5.13.0-40-generic

リリース:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"

-

ゲストOS : Xubuntu 22.04 LTS

2022-04-30 現在

カーネル:

$ uname -r
5.15.0-27-generic

リリース:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --

VirtualBox」について

-

  • VirtualBox 」は、Oracle が開発している仮想マシンを構築するためのソフトウェアです。

  • 仮想マシンを使うことで、ハードウェアで問題となりそうなPC でも、最新のLinux ディストリビューションをインストールできる可能性が高くなります。

  • 余計なソフトが一緒に動くので、その分、負荷が大きくなることと、メモリとストレージを使います。

→今回使った「ASUS Chromebox CN60」は、メモリ8GB、M.2 SSD 240GB に増設しています。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ---

1. ホストOS 側の確認:

-

システム更新で最新にしました:

$ sudo apt update
$ sudo apt upgrade

-

再起動

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----

2. 「ゲストOS」のISO イメージをダウンロード:

-

Xubuntu 22.04 LTS」のダウンロード

-

公開版のダウンロード:

https://xubuntu.org/download/

-

日本のミラー:

xubuntu-22.04-desktop-amd64.iso 2022-04-19 2.5G

→ダウンロードしたファイルを「~/ダウンロード/Xubuntu/」に移動。

-

チェックサムの確認:

SHA256SUMS

$ cd ~/ダウンロード/Xubuntu/
$ sha256sum xubuntu-22.04-desktop-amd64.iso
61a6e4df2f89782541e114cbb23dcde7ed8851ac0b013e952d2afd0094646c46  xubuntu-22.04-desktop-amd64.iso

-

-------------------------------------------------------------------

参考: 開発版のダウンロード:

Xubuntu 22.04 LTS (Jammy Jellyfish) Daily Build

-

2022-04-26 確認:

ダウンロード:

jammy-desktop-amd64.iso 2022-04-19 2.5G

-

チェックサムの確認:

SHA256SUMS

→こちらは日々更新版なので、イメージはその都度違います。ダウンロードのたびにチェックサムの値の確認が必要です。

-

$ sha256sum jammy-desktop-amd64.iso
61a6e4df2f89782541e114cbb23dcde7ed8851ac0b013e952d2afd0094646c46  jammy-desktop-amd64.iso

→2022-04-24 確認したときの、2022-04-19 のイメージの場合のチェックサムの値です。

ファイル名は違いますが、現時点では、公開版とイメージが一致しています。
再び、開発が始まるとイメージが更新されるので、チェックサムの値は変わります。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -----

3. 「仮想マシン」の作成:

-

1). システム→「VirtualBox」→「VirtualBox」を起動

-

2). 右上の「新規」ボタンをクリック

-

3). 名前とオペレーティングシステム:

-

名前:Xubuntu22-04   ←(好きな英字の名前)
タイプ:Linux
バージョン:Ubuntu(64bit)

→「次へ」

-

4). メモリサイズ:

3000 MB   ←(大きすぎると、 ホストOS が不調になります)

→「次へ」

-

5). ハードディスク:

「仮想ハードディスクを作成する」にチェック ←(つまり、ファイルが使われます)

→「作成」

-

6). ハードディスクのファイルタイプ:

「VDI(VirtualBox Disk Image)」にチェック ←(つまり、VirtualBox 形式)

→「次へ」

-

7). 物理ハードディスクにあるストレージ:

「可変サイズ」にチェック

→「次へ」

-

8). ファイルの場所とサイズ:

仮想ハードディスクとなるファイルが格納される、フォルダの指定:

今回は「/home/ubn/VirtualBox VMs/Xubuntu22-04/Xubuntu22-04.vdi」

→すでに入っている指定のまま、にしました。

-

可変サイズにした場合の、ファイルサイズの上限値:

10.00 GB →「30 GB」に変更(10 GB だとシステム更新だけですぐ一杯 になりました)

→「作成」

-

9). 仮想マシンの「Xubuntu22-04」が作成されました:
  • これが今から使う、仮想マシン(仮想のパソコン)の性能になります。 実際のハードウェアによっての制限はありますが、汎用のドライバーが使われることと、下記のように設定値を後から変更できるのがすごいところ。

-

10). 「ディスプレイ」の設定を変更:

「ディスプレイ」をクリック→「スクリーン」タブ

- ビデオメモリー: 16MB →「128MB」に変更
- グラフィックコントローラー: VMSVGA →「VBoxSVGA」に変更

→「VBoxSVGA」にすると、画面サイズを拡げてログインし直すだけで(かろうじて)反映できるので、変更しました。

-

→「OK」

-

11). 仮想マシンの「システム」の設定を変更:

「システム」をクリック→「マザーボード」タブ

- 「EFI を有効化」にチェック

→「OK」

-

12). 右側の「ストレージ」にて、「ISO イメージ」をセット

IDE セカンダリマスター: [光学ドライブ] 空 をクリック

→「ディスクファイルを選択」

→「~/ダウンロード/Xubuntu/xubuntu-22.04-desktop-amd64.iso」を選んで「開く」

「空」→「xubuntu-22.04-desktop-amd64.iso」に変わりました。

-

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- --

4. 「Xubuntu 22.04」をインストールし直す場合:

-

そのディスクに「Xubuntu 22.04」をインストールし直すときは、

少しだけ操作が加わります。そうしないとディスクで立ち上がります。

-

ちなみに、こちらのディスクに保存していたデータは消えてしまいます。事前にUSB メモリに退避しておく必要があります。 →(参考: データを退避する手順

-

1). 「起動」(緑色の右矢印)ボタンをクリック

仮想マシンが起動

-

2). 黒い画面が表示されたら、すぐにEsc キー

-

3). ブート選択画面が表示

→メニューの一番下の「UEFI Firmware Settings」を選択

-

4). 「UEFI 設定」画面が表示

→「Boot Manager」を選択:

→「CD-ROM 」を選択:

-

5). ブート選択画面が表示されます。これ以降は、新規にインストールする場合と同じ操作になります。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -

4. 「Xubuntu 22.04」を新規にインストールする場合:

-

1). 「起動」(緑色の右矢印)ボタンをクリック

仮想マシンが起動

-

2). ブート選択画面が表示

→デフォルトの選択のまま待つか、Enter

-

Xubuntu の立ち上げ時のスプラッシュ画面が表示:

-

デフォルトの壁紙が長めに表示されます:

→1600 x 900 の広めの解像度で表示されました。

-

3). Welcome 画面が表示:

→ひとつのウィンドウ画面として表示されます。

-

日本語を選ぶと、日本語の表示に変わります:

→「Xubuntu を試す」を選択:

-

4). ライブ立ち上げのデスクトップ画面が表示されました

→壁紙で、インストールアイコンが見づらいです。

-

事前の確認:

  • 端末にて、
$ uname -r
5.15.0-25-generic

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"

-

開発版の場合:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu Jammy Jellyfish (development branch)"

→公開されてから、システム更新したら、公開版と同じ表示に変わりました。

-

5). デスクトップ画面にある「Xubuntu 22.04 のインストール」をダブルクリック

→「Install」画面表示

-

6). ようこそ:

言語選択: 一番下の「日本語」をクリック

→「続ける」

-


7). キーボードレイアウト:

Japanese Japanese

「キーボード入力をここで試してください」→ @@ で確認

→「続ける」

-


8). アップデートと他のソフトウェア:

  • Xubuntu のインストール中にアップデートをダウンロードする」にチェック

  • 「グラフィックとWi-Fi ハードウェアと追加のメディアフォーマットのサードパーティ製ソフトウェアをインストールする」にチェック

→「続ける」

-


9). インストールの種類:

  • 今回は、内臓の「仮想ディスク 30GB」にインストールしました。

「ディスクを削除してXubuntu をインストール」にチェック

→「インストール」

-

以下のデバイスのパーティションテーブルが変更されます:
SCSI3(0,0,0) (sda) 

以下のパーティションは初期化されます:
SCSI3(0,0,0) (sda) のパーティション1 を ESP に
SCSI3(0,0,0) (sda) のパーティション2 を ext4 に

ESP とはUEFI パーティション(fat32 でboot フラグオン) のことです。

→「続ける」

-


10). どこに住んでいますか?:

(インストールは開始しており、並行動作しています。)

Tokyo

→「続ける」

-


11). あなたの情報を入力してください:

あなたの名前: 任意
コンピュータの名前: 任意   ←できたらホストOS とは違う名前が良いかも。
ユーザー名の入力: 任意
パスワードの入力: 任意
パスワードの確認: 任意
「ログイン時にパスワードを要求する」にチェック

-

すべての項目に緑色のチェックが付いたら、

→「続ける」

-


12). バーグラフが表示されます

-


13). 「インストールが完了しました」ダイアログ画面が表示

→ 「今すぐ再起動する」をクリック

-


13). いくら待っても、ロゴ画面のままで、再起動されません。

画面が真っ暗の場合もあるようです。

-

画面下のパネルの「CD ドライブ」のアイコンを見るとマウント解除(グレー表示)されてます。

-

Please remove the installation medium, then press ENTER:

の表示はされていませんが、そこで待っていたみたい。

→Enter キーで、再起動できました。

もし変化がないときは、仮想マシン→リセット

-

Xubuntu 21.10」での不具合は解消されていません。

ちなみに、「VMSVGA」のままの設定にしておけば(たぶん)表示されますが、画面を広げるために「VBoxSVGA」に変更するので同じ設定に戻ります。

-

-


14). ログイン画面が表示

-


15). デスクトップ画面が表示:

→上記の画面では「ソフトウェアの更新」アプリが起動されていますが、 今回は、パネルの左上を見ると「ソフトウェアの更新」アプリが起動されていまん。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- --

5. インストール後の「システム更新」:

-

公開版では追加の更新が(今のところ)ありませんでした。

-

-


コマンドでシステム更新してみました:

Ctrl+Alt+T で端末を起動:

$ uname -r
5.15.0-27-generic

カーネルのバージョンが上がっています。

-

システム更新:

$ sudo apt update
[sudo] パスワード: 
:
アップグレードできるパッケージが 1 個あります。表示するには 'apt list --upgradable' を実行してください。
$ apt list --upgradable -a
一覧表示... 完了
ubuntu-advantage-tools/jammy-updates 27.8~22.04.1 amd64 [27.7~22.04.1 からアップグレード可]
ubuntu-advantage-tools/jammy,now 27.7~22.04.1 amd64 [インストール済み、27.8~22.04.1 にアップグレード可]
$ sudo apt upgrade
:
以下のパッケージはアップグレードされます:
  ubuntu-advantage-tools

→アップグレードがひとつあったので実施しました。

-

再度、システム更新を確認:

$ sudo apt update
:
ヒット:1 http://jp.archive.ubuntu.com/ubuntu jammy InRelease                   
ヒット:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease           
ヒット:3 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease
ヒット:4 http://security.ubuntu.com/ubuntu jammy-security InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了        
パッケージはすべて最新です。

→すでに「日本のミラー」に設定されています。

-

パッケージの更新:

$ sudo apt upgrade
:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
アップグレードパッケージを検出しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

-

その他のシステム情報を確認:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

$ uname -r
5.15.0-27-generic

カーネルは「5.15.0-27」です。「Jellyfish」はクラゲのことです。

-

インストールしたときに使ったイメージの確認:

公開版の場合:   ←(今回のインストール)

$ cat /var/log/installer/media-info
Xubuntu 22.04 LTS "Jammy Jellyfish" - Release amd64 (20220419)

→公開されると「Release」に変わります。

-

開発版の場合:

$ cat /var/log/installer/media-info
Xubuntu 22.04 LTS "Jammy Jellyfish" - Daily amd64 (20220413)

→ダウンロードして使ったライブイメージの提供日がわかります。

→「Alpha」から、「Daily」に変わりました。「Beta」の表示はありません。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ---

6. 日本語入力:

-

  • パネルのキーボードアイコンか、「JA」をクリックして「日本語 - Mozc」を選ぶだけで、日本語入力ができました。

-

1). 日本語入力できるかの確認:

-

テキストエディタ「mousepad」を起動:
  • Windows+スペース」キーを押してから、

  →「半角/全角」キーを押して、日本語入力できました:

→右上の「あ」の色が見やすい水色に変更されていることに注目。

-

2). インストールされている入力メソッドを確認:

$ apt list uim* | grep インストール済み
$ apt list fcitx* | grep インストール済み

→インストールなし

-

$ apt list ibus* | grep インストール済み
:
ibus-data/jammy,jammy,now 1.5.26-4 all [インストール済み、自動]
ibus-gtk3/jammy,now 1.5.26-4 amd64 [インストール済み、自動]
ibus-gtk4/jammy,now 1.5.26-4 amd64 [インストール済み、自動]
ibus-gtk/jammy,now 1.5.26-4 amd64 [インストール済み、自動]
ibus-mozc/jammy,now 2.26.4220.100+dfsg-5.2 amd64 [インストール済み]
ibus/jammy,now 1.5.26-4 amd64 [インストール済み、自動]

→「ibus-mozc」がインストールされていました。

-

3). インストールされているmozc 関連を確認:

$ apt list *mozc* | grep インストール済み
:
ibus-mozc/jammy,now 2.26.4220.100+dfsg-5.2 amd64 [インストール済み]
mozc-data/jammy,jammy,now 2.26.4220.100+dfsg-5.2 all [インストール済み、自動]
mozc-server/jammy,now 2.26.4220.100+dfsg-5.2 amd64 [インストール済み、自動]
mozc-utils-gui/jammy,now 2.26.4220.100+dfsg-5.2 amd64 [インストール済み]

→「mozc-utils-gui」もインストールされていました。

-

-


4). 任意:「Windows+スペース」では面倒なので、「半角/全角」キーに割当を変更:

パネルの「JA」または、「あ」を右クリック → 設定 →「IBusの設定」画面

-

「全般」タブ:

「次の入力メソッド: space」の右にある「…」をクリック

「Super」のチェックを外して、キーコード「space」の右にある「…」をクリック→「無効」をクリック→「新しいアクセレータ」で「半角/全角」キーを押します。

「適用」ボタンを押します。

→「Zenkaku_Hankaku」に変わりました。

→「OK」

-

これで、「半角/全角」キーで、「JA」、「あ」の切り替えができます。

-


5). 任意:「日本語 キーボード」の別々のキーに割当を定義:

  • 「半角/全角」キーだけで日本語オン・オフするなら、この作業は不要です。

-

→「Mozc の設定」画面はキーボードアイコンからは起動できませんでした。

-

メニュー →「設定」→「Mozc の設定」→「Mozc の設定」を起動:
→「Mozc プロパティ」画面

-

「一般」タブ

「初期値に戻す」 →OK

-

キー設定の選択: →「カスタム」を選んで右の「編集…」

→「Mozc キー設定」画面

-

左下の「編集」→「定義済みのキーマップからインポート」→「MS-IME」→OK

-

再び、「編集…」(ウィンドウはマウスで広げておくと、作業しやすいです)

上段にある表題の「入力キー」の項目名をクリックして、ソート

-

下記のキーのコマンドを修正:
モード 入力キー コマンド 備考
変換前入力中 Hiragana IME を有効化
変換中 Hiragana IME を有効化
直接入力 Hiragana IME を有効化
入力文字なし Hiragana IME を有効化
:
変換前入力中 Muhenkan IME を無効化
変換中 Muhenkan IME を無効化
直接入力 Muhenkan IME を無効化 エントリーの追加が必要
入力文字なし Muhenkan IME を無効化

-

→OK →OK

→適用 →OK

→「閉じる」

-

これで「あ」を見なくても操作できます:
  • 「ひらがな」キー(Hiragana)で「IME オン」→日本語
  • 「無変換」キー(Muhenkan)で「IME オフ」→英語

(mozc は入力メソッドのオン、オフを別々のキーに簡単に割当てできるのが利点です)

-


6). 日本語入力の操作(まとめ):

- 日本語オン・オフ:  半角/全角  ←(デフォルトの定義)

- 日本語オン:     ひらがな   ←(追加の定義)
- 日本語オフ:     無変換   ←(追加の定義)

-

7). 入力メソッドのアイコン文字は「水色」ですが、明るい「水色」になって見やすく変更されました:

以前はコマンドで「オレンジ色」に変更していましたが、不要になりました。

-

参考: 入力メソッドのアイコン文字を 水色→「オレンジ色」に変更:  ←(不要)

テーマが変わっても見やすい「オレンジ色」に変更:

$ gsettings set org.freedesktop.ibus.panel xkb-icon-rgba '#f57900'

-

8). 言語パッケージのインストールの確認: ←(インストール済でした)

$ apt list language-pack-ja*
:
language-pack-ja-base/jammy,jammy,now 1:22.04+20220415 all [インストール済み]
language-pack-ja/jammy,jammy,now 1:22.04+20220415 all [インストール済み]

-

$ apt list language-pack-gnome-ja*
:
language-pack-gnome-ja-base/jammy,jammy,now 1:22.04+20220415 all [インストール済み]
language-pack-gnome-ja/jammy,jammy,now 1:22.04+20220415 all [インストール済み]

-

$ ls -1 /usr/share/locale-langpack/ja/LC_MESSAGES/
Linux-PAM.mo
:
zenmap.mo

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----

7. インストールした後のその他の設定:

-

以前に投稿したこちら を参照:

-

-


1). パネルの「メニュー」ボタンの設定を変更:

Xfce のパネルの「Whisker Menu」の設定:

-

「Whisker Menu」(白いネズミ)のアイコンを右クリック→プロパティ

-

「General」タブ:

  • 「アプリケーションの説明を表示する」のチェックを外しました。

  • アイテムのアイコンサイズ (Application size): 少し小さい →「小さい」に変更

  • カテゴリのアイコンサイズ: とても小さい →「小さい」に変更

-

「外観」タブ:

  • 「カテゴリを左に表示する」にチェック

-

→「閉じる」

-

-


2). よく使うアプリをメニューの「お気に入り」に登録:

メニュー→「最近使ったもの」→アプリを選んで、右クリック→「お気に入りに追加」

メニュー→「お気に入り」→アプリが表示されます。

ドラッグで並び順の変更が可能です。

-

-


3). 「時計」に曜日を表示:

パネルの右端にある「時計」を右クリック →プロパティ →「時計」画面

-

時計のオプション

表示形式: 「カスタム」

その下の「%d %b, %H:%M」→「%m/%d %a %R」に変更

→「閉じる」

-

表示:

04/27 水 06:47

-

-


4). ファイルマネージャ「thunar」にて、表示されるファイルの日付の書式を変更:

ファイルマネージャ(thunar) を起動 →編集 →設定

「表示」タブ

日付

形式: 今日 →「2022-04-30 07:57:19」に変更

-

-


5). ショートカットキーの設定(ウィンドウ画面のタイル動作):

  • ウィンドウのタイトルバーをマウスでつかんで、上下左右、および 4隅にぶつけることで、タイル表示ができます。

Cinnamon 並みに 8 パターンが可能です。ゆっくりぶつけると、ワークスペースの移動になります。

-

操作が楽になる、ショートカットキーの登録を行いました:

-

→追記: 以前のやり方では、うまく行きません。一部のキーが無効になります。

使用するキーの位置がバラけますが、覚えやすい位置に割り当てました:

-

ウィンドウ画面を「左半分」にタイリングする時だけ:  Windows+「←」

残りは、画面の位置とテンキー部の数字の位置が対応: Windows+「6」: 「右半分」に移動。

7(左上 )、8(上半分)、9(右上 )
4( x )、5( x  )、6(右半分)
1(左下 )、2(下半分)、3(右下 )

-

設定:

-

メニュー →設定 →「ウィンドウマネージャー」→「キーボード」タブ

-

「デフォルトに戻す」をクリック →「はい」

-

「ウィンドウを画面…」の行をダブルクリックすると、キー入力待ちになるので、

Windows」キーを押しながら、テンキー部のキー(1〜9)を押します。

-

ちなみに、「Super」キーは「Windows」キーのことです。

テンキーの1〜9(KP_xxx)が画面の位置となるように修正します:

-

デフォルトの値:

ウィンドウを画面上… にタイル表示  Super+Up
ウィンドウを画面下… にタイル表示  Super+KP_Up
ウィンドウを画面左… にタイル表示  Super+KP_Left
ウィンドウを画面右… にタイル表示  Super+Right
ウィンドウを画面左上…にタイル表示  Super+KP_Home
ウィンドウを画面右上…にタイル表示  Super+KP_Page_Up
ウィンドウを画面左下…にタイル表示  Super+KP_End
ウィンドウを画面右下…にタイル表示  Super+3
ディスクトップを表示         Super+D

↓ 下記のように修正:

ウィンドウを画面上… にタイル表示  Super+KP_Up   ★
ウィンドウを画面下… にタイル表示  Super+KP_Down  ★
ウィンドウを画面左… にタイル表示  Super+KP_Left
ウィンドウを画面右… にタイル表示  Super+KP_Right  ★
ウィンドウを画面左上…にタイル表示  Super+KP_Home
ウィンドウを画面右上…にタイル表示  Super+KP_Page_Up
ウィンドウを画面左下…にタイル表示  Super+KP_End
ウィンドウを画面右下…にタイル表示  Super+KP_Next (KP_Page_Down)  ★
ディスクトップを表示         Super+D

→登録時に、上記と違う文字列が表示されたときは、再度同じキーで登録をやり直します。

-

→「閉じる」

-

ちなみに、

firefox」ブラウザと「mousepad」は、ウィンドウサイズと位置を記憶しています。

firefox」ブラウザが1/2 画面サイズで左、「mousepad」は1/4 画面サイズで右の上、としておいて、
「端末」を起動すると、画面中央に表示されます。

-

「端末」のウィンドウを選んでおいて、(Window)+ テンキーの「3」を押すと、
「端末」のウィンドウが自動的に 1/4 のサイズに調整され、右下に移動します。
→これが「タイル表示」の動きです。

-

-


6). パネルにアプリの「ランチャー」を追加:

-

画面の上のパネルバーの空きで右クリック →パネル →パネルの設定

「パネル 0」を選んでおきます。

「表示」タブ

大きさ

行サイズ: 24 →そのまま(スリムです)

-

「アイテム」タブ

→アイテムを追加しました:

- ランチャー(Firefox ウェブ・ブラウザ) ★追加
- ランチャー(Xfce4 Terminal 端末)★追加
- ランチャー(Featherpad)、(Mousepad)、(Notepadqq) ★追加(複数を登録)

→「ランチャー」に複数のアプリを登録すると、1番上がデフォルトで、以降はメニュー選択できます:

→うまく使うと、設定の並びを変えるだけで、デフォルトのアプリを変更できるので便利です。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----

8. フォントとアプリのインストール:

-

個人的によく使っているフォントとアプリを、インストールしました。 インストールは任意なので、お好みでインストールできます。

-

-


1). テキストエディタ用に「MiguMix」フォントをインストール

$ sudo apt update
$ sudo apt install fonts-migmix
:      
以下のパッケージが新たにインストールされます:
  fonts-migmix

次のフォントを含みます:

-

-


2). 源ノ角ゴシック Code JP (Source Han Code JP) をインストール:

  • 「noto-fonts-cjk」フォントは万能ですが、プログラムコードの表示には向きません。

  • 通常、日本語と英数字は「1 : 2」のフォントがほとんどです。こちらのフォントは、日本語と英数字が「2 : 3」の変則的な等幅フォントです。日本語と英数字が混ざっていてもバランスが良く見やすいので、テキストエディタでの使用に向いています。

  • Manjaro Linux では、AUR の「otf-source-han-code-jp」にてインストールできます。
    Ubuntu やGalliumOS では、リポジトリに登録がないのでダウンロードが必要です。

-

(1). 源ノ角ゴシック Code JP (Source Han Code JP) をダウンロード:

GitHub: Fonts version 2.012R (OTF, OTC)

SourceHanCodeJP.ttc よりダウンロードしました。

-

「~/ダウンロード/fonts/」に移動

-

(2). システム全体で使えるようにインストール:
$ cd ~/ダウンロード/fonts/
$ sudo cp SourceHanCodeJP.ttc /usr/local/share/fonts/

→「源ノ角ゴシック Code JP」フォントが使えるようになりました。

-

(3). 反映されないときは、「再起動」します:

-

-


3). ファイアウォール「gufw」のインストール:

$ sudo apt install gufw
:
以下のパッケージが新たにインストールされます:
  gufw

-

ファイアウォールの開始:

メニュー →「設定」→「ファイアウォール設定ツール」→パスワード入力

「Status: 」ボタンをクリック→オンに変わります。

→盾がカラフルになればOK

-

-


4). 「disks」のインストール:

  • ストレージの管理、特にUSB メモリの管理に便利です。

-

$ sudo apt install gnome-disk-utility
:
gnome-disk-utility はすでに最新バージョン (42.0-1ubuntu1) です。

→インストール済みでした。

-

メニュー →設定→「ディスク」で起動できます。

-

-


5). 「gparted」のインストール:

-

$ sudo apt install gparted
:
以下のパッケージが新たにインストールされます:
  gparted gparted-common

-

メニュー →システム→「Gparted」で起動できます。

-

-


6). 「audacious」をインストール:

-

インストールできるかの確認:
$ apt list audacious
:
audacious/jammy 4.1-2 amd64

-

インストール:
$ sudo apt install audacious
:
以下のパッケージが新たにインストールされます:
  audacious audacious-plugins audacious-plugins-data libaudcore5 libaudgui5
  libaudqt2 libaudtag3 libcddb2 libcue2 libdecor-0-0 libdecor-0-plugin-1-cairo
  libfaad2 libfluidsynth3 libinstpatch-1.0-2 libmms0 libmodplug1
  libneon27-gnutls libqt5multimedia5 libsdl2-2.0-0 libsidplayfp6 libsndio7.0
  timgm6mb-soundfont

-

バージョンの確認:
$ audacious --version
Audacious 4.1 (Ubuntu package)

→正常に動作しました。

-

起動:

メニュー →マルチメディア →「Audacious

→正常に動作しました。

-

-


7). 「kolourpaint」をインストール:

-

インストールできるかの確認:
$ apt list kolourpaint
:
kolourpaint/jammy 4:21.12.3-0ubuntu1 amd64

-

インストール:
$ sudo apt install kolourpaint
:
以下のパッケージが新たにインストールされます:
  gamin kded5 keditbookmarks kio kolourpaint kwayland-data
  kwayland-integration libdbusmenu-qt5-2 libgamin0 libhfstospell11
  libkf5archive5 libkf5auth-data libkf5authcore5 libkf5bookmarks-data
  libkf5bookmarks5 libkf5codecs-data libkf5codecs5 libkf5completion-data
  libkf5completion5 libkf5config-bin libkf5config-data libkf5configcore5
  libkf5configgui5 libkf5configwidgets-data libkf5configwidgets5
  libkf5coreaddons-data libkf5coreaddons5 libkf5crash5 libkf5dbusaddons-bin
  libkf5dbusaddons-data libkf5dbusaddons5 libkf5doctools5
  libkf5globalaccel-bin libkf5globalaccel-data libkf5globalaccel5
  libkf5globalaccelprivate5 libkf5guiaddons-bin libkf5guiaddons-data
  libkf5guiaddons5 libkf5i18n-data libkf5i18n5 libkf5iconthemes-bin
  libkf5iconthemes-data libkf5iconthemes5 libkf5idletime5 libkf5itemviews-data
  libkf5itemviews5 libkf5jobwidgets-data libkf5jobwidgets5 libkf5kiocore5
  libkf5kiofilewidgets5 libkf5kiogui5 libkf5kiontlm5 libkf5kiowidgets5
  libkf5notifications-data libkf5notifications5 libkf5parts-data
  libkf5parts-plugins libkf5parts5 libkf5sane-data libkf5sane5
  libkf5service-bin libkf5service-data libkf5service5 libkf5solid5
  libkf5solid5-data libkf5sonnet5-data libkf5sonnetcore5 libkf5sonnetui5
  libkf5textwidgets-data libkf5textwidgets5 libkf5wallet-bin libkf5wallet-data
  libkf5wallet5 libkf5waylandclient5 libkf5widgetsaddons-data
  libkf5widgetsaddons5 libkf5windowsystem-data libkf5windowsystem5
  libkf5xmlgui-bin libkf5xmlgui-data libkf5xmlgui5 libkwalletbackend5-5
  libpolkit-qt5-1-1 libqt5printsupport5 libqt5qml5 libqt5qmlmodels5
  libqt5quick5 libqt5texttospeech5 libqt5waylandclient5
  libqt5waylandcompositor5 libqt5x11extras5 libqt5xml5 libvoikko1 libxcb-res0
  qtspeech5-speechd-plugin qtwayland5 sonnet-plugins

→依存のパッケージが多いのが難点。

-

バージョンの確認:
$ kolourpaint --version
kolourpaint 21.12.3

-

起動:

メニュー →グラフィックス →「KolourPaint」

→正常に動作しました。

-

-


8). テキストエディタ「Featherpad」

featherpad は、Markdown のハイライトが見やすいのが特徴です。 背景を黒(ダーク系)に設定すると空白(半角スペース)やTab が見やすいです。

-


(1). インストール

-

インストールできるかの確認:
$ apt list featherpad
:
featherpad/jammy 1.0.1-0.1 amd64

-

インストール:
$ sudo apt install featherpad
:
以下のパッケージが新たにインストールされます:
  featherpad featherpad-l10n

→言語パッケージが別れていて、一緒にインストールされました。

-

バージョンの確認:
$ featherpad --version
FeatherPad 1.0.1

-

システムのロケールの確認:
$ locale
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

→「Xubuntu 20.04.2 LTS 」では「LANGUAGE=ja」の設定だったので手間取りましたが、「LANGUAGE=ja_JP」に変更されていて、手間がかかりませんでした。

-

翻訳ファイルの確認:
$ ls /usr/share/featherpad/
help  help_ja  help_pt_BR  translations

$ ls /usr/share/featherpad/translations/ | grep ja
featherpad_ja.qm

→アプリの言語指定が「_ja」に変更されました。

→バージョン 0.15.0 以前は「help_ja_JP」なので注意。

-

設定はマウスを持っていくとコメントが表示されるので難しくありません。

-


(2). 挿入する日付の書式:
yyyy-MM-dd hh:mm

-

編集→「日付と時刻を貼り付け」

2022-04-30 01:14

-


(3). 開いていたファイルを起動時に開く設定にします:

オプション→設定→「ファイル」タブ

「最後のウィンドウのファイルを開いて起動する」にチェック

-


(4). 日本語入力の操作:

日本語入力は「ibus-mozc」のインストール後にできます。

- 入力メソッドのオン/オフ: 「半角/全角」キーでトグル操作

- (日本語オン/オフ): 「半角/全角」キーのトグル
- (日本語オン): 「ひらがな」キー を押してから入力
- (日本語オフ): 「無変換」キーを押してから入力

-


(5). ヘルプファイルの活用:

ヘルプファイルは 「テキストファイル」なので備忘録などに利用できます:

Ctrl+H ですぐに呼び出せ、色違いで、書き込み保護されていることを利用します。 ヘルプ以外の用途(備忘録、よく使うコマンドの貼り付け用)にも使えます。

$ sudo mousepad /usr/share/featherpad/help_ja

↓ ファイルの先頭部分に、備忘録を追記:

---
## 個人的な備忘録

1. 「Visual Studio Code」をGPU オフで起動:
$ code --disable-gpu
→起動すると表示がおかしくなるときに使えます。
「ハードウェアアクセレータを使わない」設定での起動です。

-

→管理者での編集だと日本語入力できないので、日本語は貼り付けるとよいです。

-


(6). ファイル履歴を消せない時:

ファイル→「最近更新したファイル」→「消去」にて、ファイル履歴が消去できない場合:

~/.config/featherpad/fp.conf を削除か、リネーム

$ rm -r ~/.config/featherpad/fp.conf

設定はクリアされるので、再度設定し直す必要があります。

-


(7).「featherpad」にてフォントを「MiguMix 1M」に変更:

オプション →フォント

「プログラミング用フォント」のチェックを外します

-

フォント: 「Noto Sans Mono CJK JP」→「MiguMix 1M」

サイズ: 「 11」に変更

→フォントが細身で、横幅が狭くなるので、太字に見えていたフォントがスッキリして見やすくなりました。

-


(8).「featherpad」にてフォントを「源ノ角ゴシック Code JP」に変更:

オプション →フォント

「プログラミング用フォント」のチェックを外します

-

フォント: 「Noto Sans Mono CJK JP」→「源ノ角ゴシック Code JP」

サイズ: 「 9」に変更

→こちらのフォントは、サイズを小さくしても英数字が小さくならないので、文字が見やすいのが特徴です。 サイズを小さくすることで、多くの情報を確認できます。

-

-


9). 「Notepadqq-OTE」をビルドしてインストール

テキストエディタです。Qt アプリです。

-

「Notepadqq-OTE」は、「Notepadqq」のフォーク(兄弟 ?)で、 独自のOTE (OpenTextEdit) というコンポーネントに、本来の「QtWebEngine」と入れ替えてあるのが特徴です。「Notepadqq」と見た目も挙動も同じですが、動作は軽く、いくつかの不具合も改修されています。

残念ながら現在、サイトは休止しています。

-

参考:

「Ubuntu 22.04 LTS」にて「Notepadqq」のOTE 版をビルドしてみた〈H145-3〉

-

(1). OTE 版の公式サイト

https://github.com/JuBan1/notepadqq

-

(2). ソースをダウンロード:

Download ZIP 」をクリック

→「ファイルを保存する」

-

→ファイルを作成した「~/ダウンロード/notepadqq/」フォルダに移動

-

(3). チェックサムの確認:
$ cd ~/ダウンロード/notepadqq/
$ sha256sum notepadqq-ote.zip
8c1b6969fe2841b2d929feedb0d6a2b087d61d3080c716455706e5ea26ebee92  notepadqq-ote.zip

-

(4). 「notepadqq-ote.zip」を右クリック→「ここで展開」

-

(5). ファイルの確認:
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ ls
CONTRIBUTING.md  README.md    configure  notepadqq.pro  support_files
COPYING          TODO.txt     doc        snap
Dockerfile       build-tools  images     src

-

(6). 「notepadqq」のビルドに必要なツールと依存をインストール:

開発パッケージのインストール:

$ sudo apt update
$ sudo apt install build-essential pkg-config
:
以下のパッケージが新たにインストールされます:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential dpkg-dev
  fakeroot g++ g++-11 gcc gcc-11 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan6 libatomic1
  libbinutils libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev
  libctf-nobfd0 libctf0 libdpkg-perl libfakeroot libfile-fcntllock-perl
  libgcc-11-dev libitm1 liblsan0 libnsl-dev libstdc++-11-dev libtirpc-dev
  libtsan0 libubsan1 linux-libc-dev lto-disabled-list make manpages-dev
  pkg-config rpcsvc-proto

-

$ sudo apt install libqt5svg5-dev libqt5svg5 libuchardet-dev make qt5-qmake qtbase5-dev-tools qtbase5-dev qtchooser qttools5-dev-tools 
:
make はすでに最新バージョン (4.3-4.1build1) です。
libqt5svg5 はすでに最新バージョン (5.15.3-1) です。
:
以下のパッケージが新たにインストールされます:
  geoclue-2.0 iio-sensor-proxy libclang1-14 libegl-dev libgl-dev
  libglu1-mesa-dev libglx-dev libllvm14 libpthread-stubs0-dev libqt5designer5
  libqt5designercomponents5 libqt5help5 libqt5opengl5 libqt5opengl5-dev
  libqt5positioning5 libqt5quickwidgets5 libqt5sensors5 libqt5svg5-dev
  libqt5test5 libqt5webchannel5 libqt5webkit5 libuchardet-dev libvulkan-dev
  libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxext-dev qdoc-qt5
  qhelpgenerator-qt5 qt5-assistant qt5-qmake qt5-qmake-bin
  qtattributionsscanner-qt5 qtbase5-dev qtbase5-dev-tools qtchooser
  qttools5-dev-tools x11proto-dev xorg-sgml-doctools xtrans-dev

-

(7). ビルド (./configure):
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ ./configure
:
checking for QT5 qmake... /usr/bin/qtchooser -run-tool=qmake -qt=5
checking for lrelease... /usr/bin/qtchooser -run-tool=lrelease -qt=5
checking for c++... /usr/bin/c++
checking whether c++ compiler builds test program... ok
checking whether c++ compiler supports -std=c++0x... ok
checking whether compiled test program works... ok
checking for make... /usr/bin/make
checking for pkg-config... /usr/bin/pkg-config
checking for Qt5Core library... -lQt5Core
checking for Qt5Gui library... -lQt5Gui -lQt5Core
checking for Qt5Network library... -lQt5Network -lQt5Core
checking for Qt5Widgets library... -lQt5Widgets -lQt5Gui -lQt5Core
checking for Qt5PrintSupport library... -lQt5PrintSupport -lQt5Widgets -lQt5Gui -lQt5Core
checking for Qt5Svg library... -lQt5Svg -lQt5Widgets -lQt5Gui -lQt5Core
checking for uchardet library... -luchardet
generate Makefile... Info: creating stash file /home/ubn/ダウンロード/notepadqq/notepadqq-ote/.qmake.stash
done

→成功

-

上記のやり方だと、/usr/local/ にインストールされます:

-

(8). ビルド (make):
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ make
:
make[1]: ディレクトリ '/home/ubn/ダウンロード/notepadqq/notepadqq-ote/src/ui-tests' から出ます

時間がかかります。

→成功

-

(9). インストール (make install):
$ cd ~/ダウンロード/notepadqq/notepadqq-ote/
$ sudo make install
:
/usr/lib/qt5/bin/qmake -install qinstall -exe /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/lib/notepadqq-bin /usr/local/lib/notepadqq/notepadqq-bin
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/16x16/apps/notepadqq.png /usr/local/share/icons/hicolor/16x16/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/22x22/apps/notepadqq.png /usr/local/share/icons/hicolor/22x22/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/24x24/apps/notepadqq.png /usr/local/share/icons/hicolor/24x24/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/32x32/apps/notepadqq.png /usr/local/share/icons/hicolor/32x32/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/48x48/apps/notepadqq.png /usr/local/share/icons/hicolor/48x48/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/64x64/apps/notepadqq.png /usr/local/share/icons/hicolor/64x64/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/96x96/apps/notepadqq.png /usr/local/share/icons/hicolor/96x96/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/128x128/apps/notepadqq.png /usr/local/share/icons/hicolor/128x128/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/256x256/apps/notepadqq.png /usr/local/share/icons/hicolor/256x256/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/512x512/apps/notepadqq.png /usr/local/share/icons/hicolor/512x512/apps/notepadqq.png
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/icons/hicolor/scalable/apps/notepadqq.svg /usr/local/share/icons/hicolor/scalable/apps/notepadqq.svg
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/appdata/data /usr/local/share/notepadqq/data
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/appdata/extension_tools /usr/local/share/notepadqq/extension_tools
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/out/release/bin/notepadqq /usr/local/bin/notepadqq
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/shortcuts/notepadqq.desktop /usr/local/share/applications/notepadqq.desktop
/usr/lib/qt5/bin/qmake -install qinstall /home/ubn/ダウンロード/notepadqq/notepadqq-ote/support_files/notepadqq.appdata.xml /usr/local/share/metainfo/notepadqq.appdata.xml
chmod 755 "/usr/local/bin/notepadqq"
:
make[1]: ディレクトリ '/home/ubn/ダウンロード/notepadqq/notepadqq-ote/src/ui-tests' から出ます

→成功

-

$ notepadqq --version
Notepadqq 1.4.8

-

メニューを反映させるために

ログアウト→ログイン

-

(10). 動作確認:

メニュー →開発 →「Notepadqq」

→メニューバーも日本語化されて、日本語入力もできます。ヘルプ表示の「閉じる」ボタンの表示も正常です。

OTE 版かを見分けるには、ヘルプで「software libraries:」の表示を確認します。

-

(11). フォントの変更:

設定→「環境設定…」→「外観」タブ

カラースキーマ: Default
Font Family:  →「MigMix 1M」に変更
Font Style: Regular
Font Size:  →「11pt」に変更

→「Apply」

→「OK」

-

(12). テーマの変更:

設定→「環境設定…」→「外観」タブ

カラースキーマ: Default →「Breeze Dark」に変更

→「Apply」

→「OK」

-

→カーソルの領域選択は水色でわかりやすいです。

-

(13). 参考: テーマファイルの配置の違い:
OTE 版をビルドした場合:
$ ls -1 /usr/local/share/notepadqq/data/themes/
breeze-dark.theme
default.theme    ←(デフォルトのテーマ)
dracula.theme
printing.theme
solarized-dark.theme
solarized-light.theme
theme-data.qrc    ←(設定ファイル)
zenburn.theme

→インストールされているテーマは少ないですが、普通のエディタと同じくらいのテーマ数です。 独自に作られたテーマが入っています。

-

本家版をapt でインストールした場合:
$ ls -1 /usr/share/notepadqq/editor/libs/codemirror/theme/
3024-day.css
3024-night.css
abcdef.css
ambiance-mobile.css
ambiance.css
base16-dark.css
base16-light.css
bespin.css
blackboard.css
cobalt.css
colorforth.css
darcula.css
dracula.css
duotone-dark.css
duotone-light.css
eclipse.css
elegant.css
erlang-dark.css
gruvbox-dark.css
hopscotch.css
icecoder.css
idea.css
isotope.css
lesser-dark.css
liquibyte.css
lucario.css
material.css
mbo.css
mdn-like.css
midnight.css
monokai.css
neat.css
neo.css
night.css
nord.css
oceanic-next.css
panda-syntax.css
paraiso-dark.css
paraiso-light.css
pastel-on-dark.css
railscasts.css
rubyblue.css
seti.css
shadowfox.css
solarized.css
ssms.css
the-matrix.css
tomorrow-night-bright.css
tomorrow-night-eighties.css
ttcn.css
twilight.css
vibrant-ink.css
xq-dark.css
xq-light.css
yeti.css
yonce.css
zenburn.css

→インストールされているテーマは多すぎて選ぶのも大変です。

  • ビルドした場合は、「 /usr/local/share/notepadqq/editor/libs/codemirror/theme/」になります。

-

(14). 参考: テーマファイルの形式の違い:

同じ名前のテーマで比較

-

OTE 版のテーマの場合:
$ notepadqq /usr/local/share/notepadqq/data/themes/dracula.theme

内容:

{
    "metadata" : {
        "revision" : 1,
        "name" : "Dracula",
        "author" : "Zeno Rocha",
        "license" : "MIT"
    },
    "text-styles": {
        "Normal" : {
            "text-color" : "#f8f8f2",
            "selected-text-color" : "#f8f8f2",
            "bold" : false,
            "italic" : false,
            "underline" : false,
            "strike-through" : false
        },
        "Keyword" : {
            "text-color" : "#ff79c6",
            "selected-text-color" : "#ffffff",
            "bold" : true
        },
        "Function" : {
            "text-color" : "#f8f8f0",
            "selected-text-color" : "#452886"
        },
        "Variable" : {
            "text-color" : "#ffb86c",
            "selected-text-color" : "#00316e"
        },
        "ControlFlow" : {
            "text-color" : "#f8f8f2",
            "selected-text-color" : "#ffffff",
            "bold" : true
        },
        "Operator" : {
            "text-color" : "#ff79c6",
            "selected-text-color" : "#ffffff"
        },
        "BuiltIn" : {
            "text-color" : "#50fa7b",
            "selected-text-color" : "#452886",
            "bold" : true
        },
        "Extension" : {
            "text-color" : "#f8f8f2",
            "selected-text-color" : "#ffffff",
            "bold" : true
        },
        "Preprocessor" : {
            "text-color" : "#ff79c6",
            "selected-text-color" : "#006e28"
        },
        "Attribute" : {
            "text-color" : "#50fa7b",
            "selected-text-color" : "#00316e"
        },
        "Char" : {
            "text-color" : "#f1fa8c",
            "selected-text-color" : "#6c2477"
        },
        "SpecialChar" : {
            "text-color" : "#f1fa8c",
            "selected-text-color" : "#fcfcfc"
        },
        "String" : {
            "text-color" : "#f1fa8c",
            "selected-text-color" : "#9c0e0e"
        },
        "VerbatimString" : {
            "text-color" : "#f1fa8c",
            "selected-text-color" : "#9c0e0e"
        },
        "SpecialString" : {
            "text-color" : "#f1fa8c",
            "selected-text-color" : "#ff5500"
        },
        "Import" : {
            "text-color" : "#ff79c6",
            "selected-text-color" : "#ff5500"
        },
        "DataType" : {
            "text-color" : "#8be9fd",
            "selected-text-color" : "#00316e"
        },
        "DecVal" : {
            "text-color" : "#bd93f9",
            "selected-text-color" : "#805c00"
        },
        "BaseN" : {
            "text-color" : "#bd93f9",
            "selected-text-color" : "#805c00"
        },
        "Float" : {
            "text-color" : "#bd93f9",
            "selected-text-color" : "#805c00"
        },
        "Constant" : {
            "text-color" : "#bd93f9",
            "selected-text-color" : "#5e2f00"
        },
        "Comment" : {
            "text-color" : "#6272a4",
            "selected-text-color" : "#5e5d5d"
        },
        "Documentation" : {
            "text-color" : "#6272a4",
            "selected-text-color" : "#46585e"
        },
        "Annotation" : {
            "text-color" : "#6272a4",
            "selected-text-color" : "#a44ea4"
        },
        "CommentVar" : {
            "text-color" : "#6272a4",
            "selected-text-color" : "#ffffff"
        },
        "RegionMarker" : {
            "text-color" : "#0057ae",
            "selected-text-color" : "#00316e",
            "background-color" : "#e0e9f8"
        },
        "Information" : {
            "text-color" : "#ff79c6",
            "selected-text-color" : "#805c00"
        },
        "Warning" : {
            "text-color" : "#bf0303",
            "selected-text-color" : "#9c0e0e"
        },
        "Alert" : {
            "text-color" : "#bf0303",
            "selected-text-color" : "#9c0e0e",
            "background-color" : "#f7e6e6",
            "bold" : true
        },
        "Error" : {
            "text-color" : "#bf0303",
            "selected-text-color" : "#9c0e0e",
            "underline" : true
        },
        "Others" : {
            "text-color" : "#f8f8f2",
            "selected-text-color" : "#006e28"
        }
   },
    "editor-colors": {
        "background-color" : "#282a36",   ←(「背景」の色)
        "code-folding" : "#94caef",
        "bracket-matching" : "#a05080",   ←(対応している「かっこ」の色)
        "current-line" : "#383a46",      ←(現在の「行」の色)
        "icon-border" : "#f0f0f0",
        "indentation-line" : "#5d5d5d",   ←(「インデント」の線の色)
        "line-numbers" : "#909194",      ←(「行番号」の色)
        "current-line-number" : "#B0B1B4",  ←(現在の「行番号」の色)
        "mark-bookmark" : "#204a87",      ←(「ブックマーク」の色)
        "mark-breakpoint-active" : "#ff0000",
        "mark-breakpoint-reached" : "#ffff00",
        "mark-breakpoint-disabled" : "#ff00ff",
        "mark-execution" : "#a0a0a4",
        "mark-warning" : "#00ff00",
        "mark-error" : "#ff0000",
        "modified-lines" : "#f6d1d1",     ←(編集した「行」の色)
        "replace-highlight" : "#00ff00",    ←(「置換」の対象の色)
        "saved-lines" : "#73ad54",
        "search-highlight" : "#80286a36",    ←(「検索」の対象の色)
        "selection" : "#54576a",
        "separator" : "#3d3f49",        ←(「セパレータ」の色)
        "spell-checking" : "#bf0303",     ←(「スペルチェック」の色)
        "tab-marker" : "#d2d2d2",        ←(「タブマーカー」の色)
        "template-background" : "#d6d2d0",
        "template-placeholder" : "#baf8ce",
        "template-focused-placeholder" : "#76da98",
        "template-read-only-placeholder" : "#f6e6e6",
        "word-wrap-marker" : "#64666d"     ←(「折返しマーカー」の色)
    }
}

→「notepadqq」でファイルを開くと、"#64666d" 等の「16進の色コード」にカーソルを置くと、四角の「色見本」が右隣りに表示されるので便利です。(gedit のプラグインと同じ機能が標準装備)

-

本家版のテーマの場合:
$ cat /usr/share/notepadqq/editor/libs/codemirror/theme/dracula.css

内容:

/*

    Name:       dracula
    Author:     Michael Kaminsky (http://github.com/mkaminsky11)

    Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)

*/


.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {
  background-color: #282a36 !important;
  color: #f8f8f2 !important;
  border: none;
}
.cm-s-dracula .CodeMirror-gutters { color: #282a36; }
.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; } ←(カーソルは細い縦線、乳白色)
.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }
.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }
.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }
.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }
.cm-s-dracula span.cm-comment { color: #6272a4; }
.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }
.cm-s-dracula span.cm-number { color: #bd93f9; }
.cm-s-dracula span.cm-variable { color: #50fa7b; }
.cm-s-dracula span.cm-variable-2 { color: white; }
.cm-s-dracula span.cm-def { color: #50fa7b; }
.cm-s-dracula span.cm-operator { color: #ff79c6; }
.cm-s-dracula span.cm-keyword { color: #ff79c6; }
.cm-s-dracula span.cm-atom { color: #bd93f9; }
.cm-s-dracula span.cm-meta { color: #f8f8f2; }
.cm-s-dracula span.cm-tag { color: #ff79c6; }
.cm-s-dracula span.cm-attribute { color: #50fa7b; }
.cm-s-dracula span.cm-qualifier { color: #50fa7b; }
.cm-s-dracula span.cm-property { color: #66d9ef; }
.cm-s-dracula span.cm-builtin { color: #50fa7b; }
.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }

.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }
.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }

→エンジンが違うからか、使われているファイル形式が異なります。
本家版の場合は「CSS3」で実現されています。本家版からOTE 版へのテーマの移植は大変そう。
どれがどの機能かを調べる必要があります。

-

-


10). PDF ビュワー「qpdfview」:

-

インストール

-

インストールできるかの確認:
$ apt list qpdfview
:
qpdfview/jammy 0.4.18-6 amd64

-

インストール:
$ sudo apt install qpdfview
:
以下のパッケージが新たにインストールされます:
  libpoppler-qt5-1 libqt5concurrent5 libqt5sql5 libqt5sql5-sqlite qpdfview
  qpdfview-djvu-plugin qpdfview-pdf-poppler-plugin qpdfview-ps-plugin
  qpdfview-translations

-

起動して確認:

メニュー →オフィス →「qpdfview」

→メニューは日本語化されていますが、ヘルプの目次が英語のままです。

-

-


ヘルプの日本語化、翻訳ファイルを iT では一般的な言い回しに変更:

→楽に日本語化できるように、パッチファイルを作成しました。

-

(1). ソースのダウンロード:

→「ファイルを保存する」

ダウンロードした「qpdfview-0.4.18.tar.gz」を右クリック→「ここに展開」

-

(2). パッチファイルの作成:
$ cd ~/ダウンロード/qpdfview-0.4.18/
$ featherpad qpdfview-ja.patch

↓ 内容を見やすくするために区切っていますが、区切りを無視して連続して、すべて貼り付けてください:

diff -Naur a/help/help_ja.html b/help/help_ja.html
--- a/help/help_ja.html
+++ b/help/help_ja.html
@@ -44,7 +44,7 @@ This file is additionally licensed under the Creative Commons Attribution-ShareA
         <li><a href="#edit">編集</a></li>
         <li><a href="#view">表示</a></li>
         <li><a href="#tabs">タブ</a></li>
-        <li><a href="#bookmarks">しおり</a></li>
+        <li><a href="#bookmarks">ブックマーク</a></li>
         <li><a href="#help">ヘルプ</a></li>
     </ol>
     <li><a href="#mainview">メインビュー</a></li>
@@ -87,13 +87,13 @@ This file is additionally licensed under the Creative Commons Attribution-ShareA
 
 <ul>
     <li><b>前ページ/次ページ/最初のページ/最後のページ</b> 文書の前のページ、次のページ、最初のページ、最後のページへ移動します。</li>
-    <li><b>指定ページへ跳ぶ...</b> 現在のタブに表示するページを入力するダイアログを開きます。</li>
-    <li><b>後ろに跳ぶ/前に跳ぶ</b> 表示されているページの履歴で前後に跳びます。</li>
+    <li><b>指定ページへジャンプ...</b> 現在のタブに表示するページを入力するダイアログを開きます。</li>
+    <li><b>後ろにジャンプ/前にジャンプ</b> 表示されているページの履歴で前後に飛びます。</li>
     <li><b>検索...</b>
 メインビューの下に検索ドックを開きます。そこに文字を入力すると、2秒後に自動的に検索が開始されます。また、リターンキーを押して手動で開始することもできます。リターンキーを押下する際に
 Shift キーも押しておくと、現在のタブだけではなく全てのタブに対して検索を行います
 (この挙動は、設定で拡張検索ドックが有効になっていると逆になります)。</li>
-    <li><b>前を検索/次を検索</b> 文書内の検索用語が出現する前の場所、次の場所に跳びます。</li>
+    <li><b>前を検索/次を検索</b> 文書内の検索用語が出現する前の場所、次の場所に飛びます。</li>
     <li><b>検索を取り消す</b> 現在実行中の検索を取り止め、検索ドックを閉じます。</li>
     <li><b>クリップボードにコピー</b> チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分のテキストや画像をコピーすることができます。</li>
     <li><b>註釈を追加</b> チェックを入れると、ドラッグで範囲選択できるようになり、選択した部分に註釈を追加することができます。</li>
@@ -130,7 +130,7 @@ Shift キーも押しておくと、現在のタブだけではなく全ての
     <li><b>プレゼンテーション...</b> F12 を押すとプレゼンテーションモードになります。Home キーを押すと最初のページを、End
 キーを押すと最後のページを表示します。矢印キーの → と ↓、スペースキーと Page Down キーで次のページに移動します。矢印キーの ← と
 ↑、Back Space キーと Page Up キーで前のページに移動します。Ctrl
-キーを押しながらリターンキーを押すと、前に表示したページに跳びます。</li>
+キーを押しながらリターンキーを押すと、前に表示したページに飛びます。</li>
 </ul>
 
 <p><b>拡大率</b>は Ctrl + L
@@ -149,17 +149,17 @@ Shift キーも押しておくと、現在のタブだけではなく全ての
 <p>このメニューには、クリックすることで現在のタブとして表示できる全てのタブが、メニュー項目として表示されます。タブは中クリックで閉じることができます。最初の9個までのタブは、Alt
 キーを押しながら 1 〜 9 の数字キーを押すことで切り替えることもできます。</p>
 
-<h4><a name="bookmarks">しおり</a> <a href="#top">&uarr;</a></h4>
+<h4><a name="bookmarks">ブックマーク</a> <a href="#top">&uarr;</a></h4>
 
 <ul>
-    <li><b>前のしおり</b> 現在のページより前の直近のしおりに跳びます。</li>
-    <li><b>次のしおり</b> 現在のページより後の直近のしおりに跳びます。</li>
-    <li><b>しおりを付ける</b> 現在のファイルとページにしおりを追加します。</li>
-    <li><b>しおりを外す</b> 現在のファイルとページからしおりを削除します。</li>
-    <li><b>しおりを全て外す</b> 全てのしおりを削除します。</li>
+    <li><b>前のブックマーク</b> 現在のページより前の直近のブックマークに飛びます。</li>
+    <li><b>次のブックマーク</b> 現在のページより後の直近のブックマークに飛びます。</li>
+    <li><b>ブックマークを追加</b> 現在のファイルとページにブックマークを追加します。</li>
+    <li><b>ブックマークを削除</b> 現在のファイルとページからブックマークを削除します。</li>
+    <li><b>ブックマークを全て削除</b> 全てのブックマークを削除します。</li>
     <li><b>開く</b> 任意のファイルを現在のタブに開きます。タブが無い場合は新しいタブにファイルが開かれます。</li>
     <li><b>新規タブで開く</b> 新しいタブにファイルを開きます。</li>
-    <li><b>指定ページへ跳ぶ</b> 対象のファイルを既に開いている場合は、直接そのページに移動します。そうでない場合は新しいタブにファイルを開きます。</li>
+    <li><b>指定ページへジャンプ</b> 対象のファイルを既に開いている場合は、直接そのページに移動します。そうでない場合は新しいタブにファイルを開きます。</li>
 </ul>
 
 <h4><a name="help">ヘルプ</a> <a href="#top">&uarr;</a></h4>
diff -Naur a/translations/qpdfview_ja.ts b/translations/qpdfview_ja.ts
--- a/translations/qpdfview_ja.ts
+++ b/translations/qpdfview_ja.ts
@@ -278,7 +278,7 @@
     <message>
         <location filename="../sources/bookmarkdialog.cpp" line="39"/>
         <source>Bookmark</source>
-        <translation>しおり</translation>
+        <translation>ブックマーク</translation>
     </message>
     <message>
         <location filename="../sources/bookmarkdialog.cpp" line="48"/>
@@ -316,7 +316,7 @@
     <message>
         <location filename="../sources/bookmarkmenu.cpp" line="56"/>
         <source>&amp;Remove bookmark</source>
-        <translation>しおりを外す(&amp;R)</translation>
+        <translation>ブックマークを削除(&amp;R)</translation>
     </message>
 </context>
 <context>
@@ -324,7 +324,7 @@
     <message>
         <location filename="../sources/database.cpp" line="988"/>
         <source>Jump to page %1</source>
-        <translation>%1ページヘ跳ぶ</translation>
+        <translation>%1ページヘジャンプ</translation>
     </message>
 </context>
 <context>
@@ -577,7 +577,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="1609"/>
         <source>Jump to page</source>
-        <translation>指定ページへ跳ぶ</translation>
+        <translation>指定ページへジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="1609"/>
@@ -587,7 +587,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="2014"/>
         <source>Jump to page %1</source>
-        <translation>%1ページヘ跳ぶ</translation>
+        <translation>%1ページヘジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="2165"/>
@@ -627,7 +627,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="2398"/>
         <source>&amp;Edit bookmark</source>
-        <translation>しおりを編集(&amp;E)</translation>
+        <translation>ブックマークを編集(&amp;E)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="2815"/>
@@ -747,17 +747,17 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3180"/>
         <source>&amp;Jump to page...</source>
-        <translation>指定ページへ跳ぶ(&amp;J)...</translation>
+        <translation>指定ページへジャンプ(&amp;J)...</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3182"/>
         <source>Jump &amp;backward</source>
-        <translation>後ろに跳ぶ(&amp;B)</translation>
+        <translation>後ろにジャンプ(&amp;B)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3183"/>
         <source>Jump for&amp;ward</source>
-        <translation>前に跳ぶ(&amp;W)</translation>
+        <translation>前にジャンプ(&amp;W)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3185"/>
@@ -927,17 +927,17 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3246"/>
         <source>&amp;Previous bookmark</source>
-        <translation>前のしおり(&amp;P)</translation>
+        <translation>前のブックマーク(&amp;P)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3247"/>
         <source>&amp;Next bookmark</source>
-        <translation>次のしおり(&amp;N)</translation>
+        <translation>次のブックマーク(&amp;N)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3249"/>
         <source>&amp;Add bookmark</source>
-        <translation>しおりを付ける(&amp;A)</translation>
+        <translation>ブックマークを追加(&amp;A)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3261"/>
@@ -967,7 +967,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3461"/>
         <source>Book&amp;marks</source>
-        <translation>しおり(&amp;M)</translation>
+        <translation>ブックマーク(&amp;M)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3533"/>
@@ -978,7 +978,7 @@
         <location filename="../sources/mainwindow.cpp" line="2397"/>
         <location filename="../sources/mainwindow.cpp" line="3250"/>
         <source>&amp;Remove bookmark</source>
-        <translation>しおりを外す(&amp;R)</translation>
+        <translation>ブックマークを削除(&amp;R)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="2959"/>
@@ -998,7 +998,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3251"/>
         <source>Remove all bookmarks</source>
-        <translation>しおりを全て外す</translation>
+        <translation>ブックマークを全て削除</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3255"/>
@@ -1061,7 +1061,7 @@
     <message>
         <location filename="../sources/mainwindow.cpp" line="3579"/>
         <source>&amp;Bookmarks</source>
-        <translation>しおり(&amp;B)</translation>
+        <translation>ブックマーク(&amp;B)</translation>
     </message>
     <message>
         <location filename="../sources/mainwindow.cpp" line="3590"/>
@@ -1086,12 +1086,12 @@
     <message>
         <location filename="../sources/pageitem.cpp" line="379"/>
         <source>Go to page %1.</source>
-        <translation>%1ページに跳びます。</translation>
+        <translation>%1ページに飛びます。</translation>
     </message>
     <message>
         <location filename="../sources/pageitem.cpp" line="383"/>
         <source>Go to page %1 of file &apos;%2&apos;.</source>
-        <translation>ファイル「%2」の%1ページに跳びます。</translation>
+        <translation>ファイル「%2」の%1ページに飛びます。</translation>
     </message>
     <message>
         <location filename="../sources/pageitem.cpp" line="391"/>
@@ -1548,7 +1548,7 @@
     <message>
         <location filename="../sources/settingsdialog.cpp" line="262"/>
         <source>Restore bookmarks:</source>
-        <translation>しおりを復元:</translation>
+        <translation>ブックマークを復元:</translation>
     </message>
     <message>
         <location filename="../sources/settingsdialog.cpp" line="265"/>
@@ -1950,12 +1950,12 @@
     <message>
         <location filename="../sources/shortcuthandler.cpp" line="262"/>
         <source>Skip backward</source>
-        <translation>後ろに跳ぶ</translation>
+        <translation>後ろにジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/shortcuthandler.cpp" line="266"/>
         <source>Skip forward</source>
-        <translation>前に跳ぶ</translation>
+        <translation>前にジャンプ</translation>
     </message>
     <message>
         <location filename="../sources/shortcuthandler.cpp" line="270"/>
diff -Naur a/translations/qpdfview_ja.ts b/translations/qpdfview_ja.ts
--- a/translations/qpdfview_ja.ts
+++ b/translations/qpdfview_ja.ts
@@ -429,9 +429,8 @@
     <message>
         <location filename="../sources/helpdialog.cpp" line="48"/>
         <source>help.html</source>
-        <extracomment>Please replace by file name of localized help if available, e.g. &quot;help_fr.html&quot;.
-</extracomment>
-        <translation>help.html</translation>
+        <extracomment>Please replace by file name of localized help if available, e.g. &quot;help_fr.html&quot;.</extracomment>
+        <translation>help_ja.html</translation>
     </message>
     <message>
         <location filename="../sources/helpdialog.cpp" line="63"/>

→見やすくするために区切っていますが、無視して連続して、すべて貼り付けてください。

-

(3). パッチファイルの適用:
$ cd ~/ダウンロード/qpdfview-0.4.18/

$ patch -p1 < qpdfview-ja.patch
patching file help/help_ja.html
patching file translations/qpdfview_ja.ts
patching file translations/qpdfview_ja.ts

-

(4).「lrelease」をインストール:
$ sudo apt install qttools5-dev-tools
:
qttools5-dev-tools はすでに最新バージョン (5.15.3-1) です。

-

(5).「lrelease」がインストールされたかの確認:
$ lrelease --help
Usage:
    lrelease [options] project-file
    lrelease [options] ts-files [-qm qm-file]
:

-

(6). 翻訳ファイルの変換:
$ cd ~/ダウンロード/qpdfview-0.4.18/translations/
$ lrelease qpdfview_ja.ts

Updating 'qpdfview_ja.qm'...
     368 件のメッセージを翻訳しました(完了 368 件、未完了 0 件)
     1 件の未翻訳のソーステキストを無視しました

-

(7). ファイルの配置:
$ sudo cp ~/ダウンロード/qpdfview-0.4.18/translations/qpdfview_ja.qm /usr/share/qpdfview/
$ sudo cp ~/ダウンロード/qpdfview-0.4.18/help/help_ja.html /usr/share/qpdfview/

-

(8). 起動して確認:

メニュー →オフィス →「qpdfview」

-

-


11). 「swell-foop 」ゲームをインストール:

-

インストールできるかの確認:
$ apt search swell-foop
:
swell-foop/jammy 1:41.0.1-1 amd64
  Colored ball puzzle game

-

インストール:
$ sudo apt install swell-foop
:
以下のパッケージが新たにインストールされます:
  swell-foop

→正常に動作しました。

-

→「さめざめ」もどきです。飽きずに続けてしまいます。音が出ないのは正常?

-

-


12). スクリーンセーバー(xfce4-screensaver):

-

何もしないでおくとブラック画面に落ちるのは、スクリーンセーバーの設定で、「電源管理」の設定を有効にしていたからだったようです。

-

(1). 「xfce4-screensaver」がインストールされていました:
$ apt search screensaver | grep インストール済み
:
libpam-gnome-keyring/jammy,now 40.0-3ubuntu2 amd64 [インストール済み、自動]
xdg-utils/jammy,jammy,now 1.1.3-4.1ubuntu1 all [インストール済み、自動]
xfce4-screensaver/jammy,now 4.16.0-1 amd64 [インストール済み、自動]

-

設定→スクリーンセーバー→「スクリーンセーバーの設定」画面

→デフォルトはブランク画面です。

-

(2). 参考: スクリーンセーバのデスクトップファイルが置かれている場所:

「xfce4-screensaver」の場合:

$ ls -1 /usr/share/applications/screensavers/

xfce-floaters.desktop
xfce-personal-slideshow.desktop
xfce-popsquares.desktop

→セーバー部品としては3つ。+アプリの機能として2つ(ランダム、ブランク)。

-

(3). 参考: 実行ファイルの置かれている場所:

「xfce4-screensaver」の場合:

$ ls -1 /usr/libexec/xfce4-screensaver/
floaters
popsquares
slideshow

$ ls -l /usr/libexec/xfce4-screensaver/
:
-rwxr-xr-x 1 root root 35488  3月 30  2020 floaters
-rwxr-xr-x 1 root root 31040  3月 30  2020 popsquares
-rwxr-xr-x 1 root root 47424  3月 30  2020 slideshow

-

(4). 参考: 「スクリーンセーバー」のテーマを追加:

こちら 」や「こちら 」が参考になります。

2番めは「mate-screensaver」についてですが、「mate」を「xfce4」に言い換えればOK です。 ほとんど同じことを行っています。

-

-


まとめ

公開直後の「Xubuntu 22.04 LTS」をVirtualBox にて試してみました。 通常はホストOS である「Xubuntu 20.04.4 LTS」をメインで使っています。

使い慣れているのでしっくりきます。 壁紙を変えて、カスタマイズすれば使い勝手は変わりません。

安定する「Xubuntu 22.04.1 LTS」の公開(半年後?)まで待ってから、メイン使用に切り替える予定でしたが、 安定しているので、もう少し早くなるかも。それまではVirtualBox にて試運転して、問題点とその回避策を洗い出します。

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

-

「PyCharm」の「Edu Tools」プラグインの学習課題の翻訳にトライ〈H146-4〉

登録日: 2022-04-15 更新日: 2022-05-01

前回、「Python」の開発で使われるIDE の「PyCharm」コードエディタをインストールして日本語化 しました。

-

残念ながら、Python の学習のために追加した「EduTools」プラグインは日本語化の対象外 でした。

英語のままでは学習が進まないので、まずは基本的なコース の「Introduction to Python」(Python の基本)を翻訳してみました。その備忘録です。

-

-

ホストOS : Xubuntu 20.04.4 LTS

ゲストOS : Lubuntu 22.04 LTS   ←(今回の作業)

-

-

使用したPC は「ASUS Chromebox CN60 」で、 プロセッサは第4世代の「Intel Celeron 2955U 」です。UEFI 立ち上げです。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック

-

-


目次

-

前回の作業:

-

1. Pycharm のインストールと日本語化:

2. 学習用の「Edu Tools」プラグインのインストール:

3. 学習コース(プロジェクト)として、「Introduction to Python」を選択:

-

今回の作業:

-

1. パッチの適用: A.「新規でファイルを作成する」手順:  ←(オススメ)

  A で使うファイル: Delete-md-File.sh

  A で使うファイル: pycharm-ja.patch  ←(差分がありません。新規)

-

2. パッチの適用: B. 初期に作成した、通常の手順:

  B で使うファイル: pycharm-ja.patch

-

3. パッチの適用: C. エラー回避を考えた手順:

  C で使うファイル: Delete-LineEnd.sh

  C で使うファイル: pycharm-ja.patch  ←(B と同じです)

-

-

4. プルリクエストで提案した手順:

  使うファイル: Delete-md-File.sh  ←(A と同じですが、警告表示に含まれる日本語は省略)

  使うファイル: ja.patch  ←(A と同じですが、ファイル名を変えました)

-

「まとめ へ」

-

「目次詳細 へ」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -

「Lubuntu 22.04 LTS」:

-

「PyCharm」の「Edu Tools」プラグインを使って、Python の学習:

→今回、基礎コースの「Introduction to Python」を日本語化しました。

右にあるパネルが「Toolbox」ツールです。「JetBrains」社製アプリのパッケージ管理や起動ができます。 ここではプロジェクトファイルを指定しての「PyCharm」の起動(つまり、ランチャー)に使っています。

-

「Edu Tools」プラグインの学習コースの選択画面:

→「Introduction to Python」以外の学習コースも選べます。ただし、今のところ英語です。

-


現在のバージョンを表示:

-

Lubuntu 22.04 LTS

2022-04-06 現在

カーネル:

$ uname -r
5.15.0-25-generic

リリース:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu Jammy Jellyfish (development branch)"

→「Jellyfish」とはクラゲのことです。公開前の開発版です。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --

1. 参考: 学習に使う「~/PycharmProjects」のファイルを確認:

-

1). 「PyCharm」(または、Welcome 画面)を起動:

画面下パネルの右の「ギア」アイコンをクリック→「Toolbox」画面→「PyCharm Community」をクリック。
もしくは、「プロジェクト」タブ→「Introduction to Python」をクリック。

-

または、手動でインストールしてパスを通した のなら、

$ pycharm.sh

-

→「PyCharm」で前回開いていた ファイル(タブ)が開きます。

つまり、学習コースの続きが表示されます。「英語」です

→Pycharm で学習が始まることを確認して、右上の「x」で閉じます。

-

2). 下記のファイルができていることを確認:

$ ls -1 ~/PycharmProjects/'Introduction to Python'/
:
'Classes and objects'
'Condition expressions'
'Data structures'
'File input output'
Functions
Introduction
LICENSE
Loops
'Modules and packages'
README.md
Strings
Variables
course-info.yaml
course-remote-info.yaml

→フォルダ名に「半角スペース」が含まれていることに注目

-

非表示のファイルも表示:
$ ls -1a ~/PycharmProjects/'Introduction to Python'/
:
.idea
'Classes and objects'
'Condition expressions'
'Data structures'
Delete-md-File.sh
'File input output'
Functions
Introduction
LICENSE
Loops
'Modules and packages'
README.md
Strings
Variables
course-info.yaml
course-remote-info.yaml
$ ls -1a ~/PycharmProjects/'Introduction to Python'/.idea
:
.gitignore
'Introduction to Python.iml'
VirtualEnvironment
externalDependencies.xml
inspectionProfiles
misc.xml
modules.xml
workspace.xml

→「.idea」に管理ファイルがまとめられています。

-

3).「GitHub: introduction_to_python 」サイトに置かれたファイルとの比較

Condition expressions
Data structures
File input output
Functions
Introduction
Loops
Modules and packages
Strings
Variables
.gitignore
LICENSE
README.md
course-info.yaml
course-remote-info.yaml

→ほとんどのファイルが、そのままホームフォルダに落ちています。

-

4). オリジナルを退避(重要):

$ cd
$ cp -r PycharmProjects PycharmProjects-ORG

-

5). 退避後、すぐに日本語化したい場合は「こちら

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ---

2. 参考: 学習に使う「~/PycharmProjects」のファイルツリーを表示:

-

~/PycharmProjects$ tree
.
└── Introduction to Python      ←Python の基本の学習(プロジェクト)
    ├── Classes and objects         ←クラスとオブジェクト
    │   ├── Class and Instance Variables
    │   │   ├── class_instance_variables.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)クラス変数とインスタンス変数
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Definition
    │   │   ├── class_definition.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)意味
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Special __init__ method
    │   │   ├── init_method.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── The self parameter
    │   │   ├── self_parameter.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)自己パラメータ
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Update variable
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)変数を更新
    │   │   ├── tests
    │   │   │   ├── __init__.py
    │   │   │   └── test_task.py
    │   │   └── update_variable.py
    │   ├── Variable access
    │   │   ├── access_variable.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)可変アクセス
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── __str__ vs __repr__
    │   │   ├── str_and_repr.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── Condition expressions        ←条件式
    │   ├── Boolean operators
    │   │   ├── boolean_operators.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)条件式
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Boolean operators order
    │   │   ├── boolean_order.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ブール演算子の順序
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Else and elif parts in if statement
    │   │   ├── else_elif.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md      ←(注目)ifステートメントのElseとelifの部分
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── If statement
    │   │   ├── if_statement.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)If ステートメント
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── Data structures        ←データ構造
    │   ├── Dictionaries
    │   │   ├── dicts.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)辞書
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Dictionary keys() and values()
    │   │   ├── dict_key_value.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)辞書 keys() と values()
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── In keyword
    │   │   ├── in_keyword.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)In keyword
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Join method
    │   │   ├── join_method.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)結合方法
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── List items
    │   │   ├── list_items.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)リストアイテム
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Lists introduction
    │   │   ├── lists.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)リスト紹介
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Lists operations
    │   │   ├── list_operations.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)操作を一覧表示
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Nested Lists
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ネストされたリスト
    │   │   ├── task.py
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Tuples
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)タプル
    │   │   ├── tests
    │   │   │   ├── __init__.py
    │   │   │   └── test_task.py
    │   │   └── tuples.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── File input output        ←ファイル入出力
    │   ├── Open file
    │   │   ├── input.txt
    │   │   ├── input1.txt
    │   │   ├── open_file.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ファイルを開く
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Read file
    │   │   ├── input.txt
    │   │   ├── input1.txt
    │   │   ├── read_file.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ファイルを読む
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── What next
    │   │   ├── main.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   └── task.md         ←(注目)次は何
    │   ├── Write to file
    │   │   ├── output.txt
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ファイルに書き込む
    │   │   ├── tests
    │   │   │   ├── __init__.py
    │   │   │   └── test_task.py
    │   │   └── write_to_file.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── Functions        ←関数
    │   ├── Args and kwargs
    │   │   ├── args_kwargs.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)Argsとkwargs
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Default parameters
    │   │   ├── default_parameter.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)デフォルトパラメータ
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Definition
    │   │   ├── functions.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)意味
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Keyword Arguments
    │   │   ├── keyword_args.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)キーワード引数
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Parameters and call arguments
    │   │   ├── param_args.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)パラメータと呼び出し引数
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Recursion
    │   │   ├── recursion.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)再帰
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Return value
    │   │   ├── return_keyword.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)戻り値
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── Introduction        ←序章
    │   ├── About
    │   │   ├── main.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   └── task.md         ←(注目)コースについて
    │   ├── Comments
    │   │   ├── comments.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)コメント
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Course View
    │   │   ├── edu_course_view.png
    │   │   ├── main.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   └── task.md         ←(注目)コースビュー
    │   ├── Editor
    │   │   ├── edu_context_menu_run.png
    │   │   ├── edu_editor.png
    │   │   ├── main.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   └── task.md         ←(注目)エディタ
    │   ├── Navigating Around
    │   │   ├── edu_course_overview.png
    │   │   ├── main.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   └── task.md         ←(注目)ナビゲート
    │   ├── Our first program
    │   │   ├── execute.svg
    │   │   ├── hello_world.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   └── task.md         ←(注目)最初のプログラム
    │   ├── Task Description
    │   │   ├── images
    │   │   │   ├── back.svg
    │   │   │   ├── commentTask.svg
    │   │   │   ├── edu_next_button.png
    │   │   │   ├── edu_peek_solution.png
    │   │   │   ├── edu_task_description_window_settings.png
    │   │   │   ├── forward.svg
    │   │   │   ├── gear.svg
    │   │   │   ├── hideToolWindow.svg
    │   │   │   └── reset.svg
    │   │   ├── main.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   └── task.md         ←(注目)課題の説明
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── LICENSE
    ├── Loops        ←ループ
    │   ├── Break keyword
    │   │   ├── break_keyword.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)Break keyword
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Continue keyword
    │   │   ├── continue_keyword.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目) Continue keyword
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Else with loops
    │   │   ├── else_with_loops.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)それ以外の場合はループ
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── For loop
    │   │   ├── for_loop.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)For ループ
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── List Comprehension
    │   │   ├── __init__.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)リスト内包
    │   │   ├── task.py
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Loop over a string
    │   │   ├── for_string.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)文字列をループする
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Nested List Comprehension
    │   │   ├── __init__.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ネストされたリスト内包
    │   │   ├── task.py
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Nested for Loop
    │   │   ├── __init__.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ネストされたforループ
    │   │   ├── task.py
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── While loop
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)while ループ
    │   │   ├── tests
    │   │   │   ├── __init__.py
    │   │   │   └── test_task.py
    │   │   └── while_loop.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── Modules and packages        ←モジュールとパッケージ
    │   ├── Built-in modules
    │   │   ├── builtin_modules.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)内蔵モジュール
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Executing modules as scripts
    │   │   ├── __init__.py
    │   │   ├── some_module.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)モジュールをスクリプトとして実行
    │   │   ├── task.py
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── From import
    │   │   ├── calculator.py
    │   │   ├── from_import.py
    │   │   ├── my_module.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)From import
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Import module
    │   │   ├── calculator.py
    │   │   ├── imports.py
    │   │   ├── my_module.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)モジュールのインポート
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Packages
    │   │   ├── classes
    │   │   │   ├── __init__.py
    │   │   │   └── calculator.py
    │   │   ├── functions
    │   │   │   ├── __init__.py
    │   │   │   ├── goodbye.py
    │   │   │   └── greeting
    │   │   │       ├── __init__.py
    │   │   │       ├── hello.py
    │   │   │       └── official.py
    │   │   ├── packages.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)パッケージ
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── __init__.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── README.md         ←(注目)
    ├── Strings        ←文字列
    │   ├── Basic string methods
    │   │   ├── string_methods.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)基本的な文字列メソッド
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Character escaping
    │   │   ├── character_escaping.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)キャラクターエスケープ
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── Concatenation
    │   │   ├── concatenation.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)連結
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── F-strings
    │   │   ├── f_strings.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)Fストリング
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── In operator
    │   │   ├── in_operator.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)演算子
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── String formatting
    │   │   ├── string_formatting.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)文字列のフォーマット
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── String indexing
    │   │   ├── string_indexing.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)文字列のインデックス作成
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── String length
    │   │   ├── len_function.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)文字列の長さ
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── String multiplication
    │   │   ├── string_multiplication.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)文字列の乗算
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── String negative indexing
    │   │   ├── negative_indexing.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)文字列の負のインデックス
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── String slicing
    │   │   ├── slicing.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)文字列のスライス
    │   │   └── tests
    │   │       ├── __init__.py
    │   │       └── test_task.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── Variables        ←変数
    │   ├── Arithmetic operators
    │   │   ├── arithmetic_operators.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)算術演算子
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Assignments
    │   │   ├── assignments.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)割り当て
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Boolean operators
    │   │   ├── boolean_operators.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)ブール演算子
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Comparison operators
    │   │   ├── comparison_operators.py
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)比較演算子
    │   │   └── tests
    │   │       └── test_task.py
    │   ├── Type conversion
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)型変換
    │   │   ├── tests
    │   │   │   └── test_task.py
    │   │   └── type_cast.py
    │   ├── Undefined variable
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)未定義の変数
    │   │   ├── tests
    │   │   │   └── test_task.py
    │   │   └── undefined_variable.py
    │   ├── Variable definition
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)変数の定義
    │   │   ├── tests
    │   │   │   └── test_task.py
    │   │   └── variable_definition.py
    │   ├── Variable types
    │   │   ├── task-info.yaml
    │   │   ├── task-remote-info.yaml
    │   │   ├── task.md         ←(注目)変数タイプ
    │   │   ├── tests
    │   │   │   └── test_task.py
    │   │   └── variable_type.py
    │   ├── lesson-info.yaml
    │   └── lesson-remote-info.yaml
    ├── course-info.yaml
    └── course-remote-info.yaml

→各課題ごとに存在する「task.md」ファイルを翻訳します。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----

3. 試しに、日本語の翻訳にトライ:

-

作業は要りません。確認のみ。

-

1). 参考: 試しに、ひとつの課題のファイルを翻訳してみました:

$ featherpad ~/PycharmProjects/'Introduction to Python'/Introduction/About/task.md

→ファイル指定時は、フォルダ名に「半角スペース」が含まれているので注意。

-

翻訳:

## コースについて

Python プログラミングの基礎のコースへようこそ!

#### なぜ Python を学ぶのですか?

Python は、世界で最も人気のあるプログラミング言語の1つです。
Python は、データサイエンス、ML、AI で広く使用されており、最も急速に成長している主要なプログラミング言語です。

これは、プログラミングに精通するための完璧な出発点です。
Python は、他のほとんどのプログラミング言語よりも読み取り、書き込み、学習が簡単です。
Python を使用すると、単純な初心者の課題にとらわれることはありません。
多数のPython フォーラムとQ&A プラットフォーム、およびサポートを提供するオープンソースコミュニティは、学習意欲を維持するのに役立つ貴重なリソースです。

#### コースの目的

このコースを完了すると、次のことができるようになります。

- 変数、データ構造、関数、クラスなどの基本的なプログラミングの概念を理解して利用できます。
- Python コードを読めます。
- Python で簡単なプログラムを作成できます。
- Python モジュールおよびパッケージを操作できます。
- 他のコースで Python を学び続け、より複雑な資料を提供します。

#### 前提条件

このコースを完了するために、Python やプログラミング全般の経験は必要ありません。

頑張って!

-

2). 翻訳されたか確認:

-

(1).「PyCharm へようこそ」(Welcome 画面)を起動:
$ pycharm.sh

→パスを通していれば、どこでも実行できます。

-

(2).「PyCharm」で前回開いていた ファイル(タブ)が開きます

つまり、学習コースの続きになります。

→英語表示のままです:

-

(3). 左の各項目の四角いアイコンがある「課題名」をダブルクリック →翻訳が反映

→再読込みされ、日本語で表示されました。

何かしらの修正を行ったら、再読込みが必要です。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -----

4. 翻訳すべきファイルを抽出:

-

作業は要りません。確認のみ。

-

各課題フォルダにある「task.md」ファイルが、課題の説明のようです。 ファイル名を日本語化するのは別にして、ファイルの内容を翻訳するだけでも、学習が楽になります。

-

「.md」ファイルを抽出:

$ sudo find ~/PycharmProjects/ -name "*.md" | sort
/home/ubn/PycharmProjects/Introduction to Python/Classes and objects/Class and Instance Variables/task.md
/home/ubn/PycharmProjects/Introduction to Python/Classes and objects/Definition/task.md
/home/ubn/PycharmProjects/Introduction to Python/Classes and objects/Special __init__ method/task.md
/home/ubn/PycharmProjects/Introduction to Python/Classes and objects/The self parameter/task.md
/home/ubn/PycharmProjects/Introduction to Python/Classes and objects/Update variable/task.md
/home/ubn/PycharmProjects/Introduction to Python/Classes and objects/Variable access/task.md
/home/ubn/PycharmProjects/Introduction to Python/Classes and objects/__str__ vs __repr__/task.md
/home/ubn/PycharmProjects/Introduction to Python/Condition expressions/Boolean operators order/task.md
/home/ubn/PycharmProjects/Introduction to Python/Condition expressions/Boolean operators/task.md
/home/ubn/PycharmProjects/Introduction to Python/Condition expressions/Else and elif parts in if statement/task.md
/home/ubn/PycharmProjects/Introduction to Python/Condition expressions/If statement/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/Dictionaries/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/Dictionary keys() and values()/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/In keyword/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/Join method/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/List items/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/Lists introduction/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/Lists operations/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/Nested Lists/task.md
/home/ubn/PycharmProjects/Introduction to Python/Data structures/Tuples/task.md
/home/ubn/PycharmProjects/Introduction to Python/File input output/Open file/task.md
/home/ubn/PycharmProjects/Introduction to Python/File input output/Read file/task.md
/home/ubn/PycharmProjects/Introduction to Python/File input output/What next/task.md
/home/ubn/PycharmProjects/Introduction to Python/File input output/Write to file/task.md
/home/ubn/PycharmProjects/Introduction to Python/Functions/Args and kwargs/task.md
/home/ubn/PycharmProjects/Introduction to Python/Functions/Default parameters/task.md
/home/ubn/PycharmProjects/Introduction to Python/Functions/Definition/task.md
/home/ubn/PycharmProjects/Introduction to Python/Functions/Keyword Arguments/task.md
/home/ubn/PycharmProjects/Introduction to Python/Functions/Parameters and call arguments/task.md
/home/ubn/PycharmProjects/Introduction to Python/Functions/Recursion/task.md
/home/ubn/PycharmProjects/Introduction to Python/Functions/Return value/task.md
/home/ubn/PycharmProjects/Introduction to Python/Introduction/About/task.md
/home/ubn/PycharmProjects/Introduction to Python/Introduction/Comments/task.md
/home/ubn/PycharmProjects/Introduction to Python/Introduction/Course View/task.md
/home/ubn/PycharmProjects/Introduction to Python/Introduction/Editor/task.md
/home/ubn/PycharmProjects/Introduction to Python/Introduction/Navigating Around/task.md
/home/ubn/PycharmProjects/Introduction to Python/Introduction/Our first program/task.md
/home/ubn/PycharmProjects/Introduction to Python/Introduction/Task Description/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/Break keyword/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/Continue keyword/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/Else with loops/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/For loop/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/List Comprehension/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/Loop over a string/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/Nested List Comprehension/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/Nested for Loop/task.md
/home/ubn/PycharmProjects/Introduction to Python/Loops/While loop/task.md
/home/ubn/PycharmProjects/Introduction to Python/Modules and packages/Built-in modules/task.md
/home/ubn/PycharmProjects/Introduction to Python/Modules and packages/Executing modules as scripts/task.md
/home/ubn/PycharmProjects/Introduction to Python/Modules and packages/From import/task.md
/home/ubn/PycharmProjects/Introduction to Python/Modules and packages/Import module/task.md
/home/ubn/PycharmProjects/Introduction to Python/Modules and packages/Packages/task.md
/home/ubn/PycharmProjects/Introduction to Python/README.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/Basic string methods/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/Character escaping/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/Concatenation/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/F-strings/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/In operator/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/String formatting/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/String indexing/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/String length/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/String multiplication/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/String negative indexing/task.md
/home/ubn/PycharmProjects/Introduction to Python/Strings/String slicing/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Arithmetic operators/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Assignments/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Boolean operators/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Comparison operators/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Type conversion/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Undefined variable/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Variable definition/task.md
/home/ubn/PycharmProjects/Introduction to Python/Variables/Variable types/task.md

→一部のフォルダ名に「半角スペース」が含まれています。ファイル指定時は注意が必要。

学習するコース(プロジェクト名)のひとつが、「Introduction to Python」です。

コースを選んで「Start」することで、これらのファイルがホームにロードされ、作られます。

-

追記: もし、プルリクエストした ? 「Translation」フォルダが追加された場合は、そこにあるmd ファイルは除外することになります。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -

5. md ファイルを翻訳:

-

「課題の説明」部分はmd ファイル(Markdown ファイル)です。その翻訳作業はすでに完了 させました。 なので、こちらの作業は要りません。

-

↓ 日本語化は、次に作成するパッチファイルで行います。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- --

A. (test3): 「新規でファイルを作成する」やり方で、パッチファイルを適用:

-

対象ファイルを別のフォルダに待避してから、対象ファイルを削除して、新規でファイルを作成するパッチファイルを作成しました。そのパッチファイルを適用するやり方です。

→ファイル削除のスクリプトを作るのが面倒ですが、パッチ適用時のエラーを回避 でき、確実で応用もできます。

-

事前のトライで日本語化されたファイルを元に、パッチ作成を行いました

-

1). 新規にファイルが作成されるように、対象ファイルを削除するシェルスクリプトを作成:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ featherpad Delete-md-File.sh

内容:

#!/bin/bash
echo
echo "----------------"
echo "警告: 次のファイルはスクリプトによって削除されます:"
echo "Warning: The following files will be deleted by the script."
echo "Delete ->  ~/PycharmProjects/'Introduction to Python'/----/task.md"
echo 
read -p "Is it OK ? (y/N): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac
echo
cd ~/PycharmProjects/'Introduction to Python'/
rm 'Classes and objects/Class and Instance Variables/task.md'
rm 'Classes and objects/Definition/task.md'
rm 'Classes and objects/Special __init__ method/task.md'
rm 'Classes and objects/The self parameter/task.md'
rm 'Classes and objects/Update variable/task.md'
rm 'Classes and objects/Variable access/task.md'
rm 'Classes and objects/__str__ vs __repr__/task.md'
rm 'Condition expressions/Boolean operators order/task.md'
rm 'Condition expressions/Boolean operators/task.md'
rm 'Condition expressions/Else and elif parts in if statement/task.md'
rm 'Condition expressions/If statement/task.md'
rm 'Data structures/Dictionaries/task.md'
rm 'Data structures/Dictionary keys() and values()/task.md'
rm 'Data structures/In keyword/task.md'
rm 'Data structures/Join method/task.md'
rm 'Data structures/List items/task.md'
rm 'Data structures/Lists introduction/task.md'
rm 'Data structures/Lists operations/task.md'
rm 'Data structures/Nested Lists/task.md'
rm 'Data structures/Tuples/task.md'
rm 'File input output/Open file/task.md'
rm 'File input output/Read file/task.md'
rm 'File input output/What next/task.md'
rm 'File input output/Write to file/task.md'
rm 'Functions/Args and kwargs/task.md'
rm 'Functions/Default parameters/task.md'
rm 'Functions/Definition/task.md'
rm 'Functions/Keyword Arguments/task.md'
rm 'Functions/Parameters and call arguments/task.md'
rm 'Functions/Recursion/task.md'
rm 'Functions/Return value/task.md'
rm 'Introduction/About/task.md'
rm 'Introduction/Comments/task.md'
rm 'Introduction/Course View/task.md'
rm 'Introduction/Editor/task.md'
rm 'Introduction/Navigating Around/task.md'
rm 'Introduction/Our first program/task.md'
rm 'Introduction/Task Description/task.md'
rm 'Loops/Break keyword/task.md'
rm 'Loops/Continue keyword/task.md'
rm 'Loops/Else with loops/task.md'
rm 'Loops/For loop/task.md'
rm 'Loops/List Comprehension/task.md'
rm 'Loops/Loop over a string/task.md'
rm 'Loops/Nested List Comprehension/task.md'
rm 'Loops/Nested for Loop/task.md'
rm 'Loops/While loop/task.md'
rm 'Modules and packages/Built-in modules/task.md'
rm 'Modules and packages/Executing modules as scripts/task.md'
rm 'Modules and packages/From import/task.md'
rm 'Modules and packages/Import module/task.md'
rm 'Modules and packages/Packages/task.md'
rm 'README.md'
rm 'Strings/Basic string methods/task.md'
rm 'Strings/Character escaping/task.md'
rm 'Strings/Concatenation/task.md'
rm 'Strings/F-strings/task.md'
rm 'Strings/In operator/task.md'
rm 'Strings/String formatting/task.md'
rm 'Strings/String indexing/task.md'
rm 'Strings/String length/task.md'
rm 'Strings/String multiplication/task.md'
rm 'Strings/String negative indexing/task.md'
rm 'Strings/String slicing/task.md'
rm 'Variables/Arithmetic operators/task.md'
rm 'Variables/Assignments/task.md'
rm 'Variables/Boolean operators/task.md'
rm 'Variables/Comparison operators/task.md'
rm 'Variables/Type conversion/task.md'
rm 'Variables/Undefined variable/task.md'
rm 'Variables/Variable definition/task.md'
rm 'Variables/Variable types/task.md'

-

2). 対象ファイルを削除するシェルスクリプトの実行:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ bash Delete-md-File.sh

→これだと実行権限をファイルに与える作業($ chmod +x ./Delete-md-File.sh)は要りません。

-

3). 日本語化したファイルを新規に作成するためのパッチファイルを作成:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ featherpad pycharm-ja.patch

↓ 連続して、すべて貼り付けてください(長いので、マウスで先頭を選んでから、Sift+下矢印「↓」を使うと楽です)

diff -Naur "a/Classes and objects/Class and Instance Variables/task.md" "b/Classes and objects/Class and Instance Variables/task.md"
--- "a/Classes and objects/Class and Instance Variables/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Classes and objects/Class and Instance Variables/task.md"    2022-04-09 23:02:37.686574694 +0900
@@ -0,0 +1,53 @@
+## クラス変数とインスタンス変数 :(Class and Instance Variables)
+
+一般に、「インスタンス変数」は各インスタンスに固有のデータ用であり、  
+「クラス変数」はクラスのすべてのインスタンスによって共有される属性とメソッド用です:
+
+```python
+class Cat:
+
+    species = "Felis catus"  
+    
+    def __init__(self, breed, name):
+        self.breed = breed  
+        self.name = name
+
+cleo = Cat('mix', 'Cleo')
+furry = Cat('bengal', 'Furry')
+
+print(cleo.name)
+print(cleo.species)
+print(furry.name)
+print(furry.species)
+```
+
+```text
+Cleo
+Felis catus
+Furry
+Felis catus
+```
+`species`(種族)はすべてのインスタンスで共有されるクラス変数であり、    
+`name`(名前)と `breed`(品種)は各インスタンスに固有のインスタンス変数であることがわかります。
+
+共有データは、リストや辞書などの可変オブジェクトを含む場合、驚くべき効果をもたらす可能性があります。
+
+
+クラス変数がリストであり、1つのオブジェクトに対して変更すると、  
+クラスのすべてのオブジェクトに対して変更されます
+
+コードエディタの例を確認してください。
+
+`print(barsik.favorite_food)` が出力する内容を確認してください。
+
+リストを使用して各インスタンスに固有の機能を追跡する場合は、  
+リストをインスタンス属性にする必要があります。
+
+コードエディタで、`Animals` クラスの実装を完了して、以下の `print` ステートメントが次のような行を出力するようにします:
+
+各ペットに `"This is Doggy the dog, one of my pets."`   
+(これは私のペットの1匹である犬の犬です。)
+
+<div class='hint'>クラス変数には、すべてのインスタンス間で共有される情報が含まれている必要があります。(<code>"pets"</code> の1つです)</div>
+
+<div class='hint'>インスタンス変数には、インスタンスに固有の情報が含まれている必要があります。(名前は一意です)</div>
diff -Naur "a/Classes and objects/Definition/task.md" "b/Classes and objects/Definition/task.md"
--- "a/Classes and objects/Definition/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Classes and objects/Definition/task.md"  2022-04-09 23:02:37.682574653 +0900
@@ -0,0 +1,54 @@
+## 意味 :(Definition)
+
+クラスは、データと機能をバンドルする手段を提供します。
+
+新しいクラスを作成すると、新しいタイプのオブジェクトが作成され、そのタイプの新しいインスタンスを作成できるようになります。
+
+クラスは基本的に、オブジェクトを作成するためのテンプレートです。  
+各クラスインスタンス(オブジェクト)には、その状態を維持するための属性を付加できます。  
+オブジェクトの関数はメソッドと呼ばれ、その状態を変更できます。  
+メソッドは、オブジェクトのクラスによって定義されます。
+
+クラス定義の一般化された形式は次のようになります:
+
+```
+class ClassName:
+    <statement-1>
+    .
+    .
+    .
+    <statement-N>
+```
+
+関数定義( `def` ステートメント)のようなクラス定義は、効果を発揮する前に実行する必要があります。
+
+クラス定義内のステートメントは通常関数定義ですが、他のステートメントが役立つ場合もあります。
+クラス内の関数定義には通常、独特の形式の引数リストがあります。これについては後で説明します。
+
+クラスオブジェクトは、属性参照とインスタンス化の2種類の操作をサポートします。
+
+属性参照については、次のセクションで説明します。
+
+クラスのインスタンス化は関数表記を使用します。
+クラスオブジェクトが、クラスの新しいインスタンスを返すパラメータのない関数であると想像してみてください。
+
+例えば:
+
+```python
+class SomeClass:
+    """A simple example class"""
+    i = 12345
+
+x = SomeClass()
+```
+`x = SomeClass()` は、クラスの新しいインスタンスを作成し、このオブジェクトをローカル変数 `x` に割り当てます。
+
+クラス定義構文の詳細については、Python ドキュメントの <a href="https://docs.python.org/3/tutorial/classes.html#class-definition-syntax">このセクション</a> をご覧ください。
+
+`MyClass` 内の `variable` に値を割り当て、クラス `MyClass()` のオブジェクト `my_class` を作成します。
+
+コードを実行して、何が起こるかを確認してください。
+
+<div class='hint'>任意の値を <code>variable</code> に割り当てます。</div>
+
+<div class='hint'>テキストの例を見て、オブジェクトをインスタンス化する方法を理解してください。</div>
diff -Naur "a/Classes and objects/Special __init__ method/task.md" "b/Classes and objects/Special __init__ method/task.md"
--- "a/Classes and objects/Special __init__ method/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Classes and objects/Special __init__ method/task.md" 2022-04-09 23:02:37.682574653 +0900
@@ -0,0 +1,49 @@
+## 特別な__init__メソッド :(Special &#95;&#95;init&#95;&#95; method)
+
+インスタンス化操作(クラスオブジェクトの「呼び出し」)は空のオブジェクトを作成しますが、特定の初期状態にカスタマイズされたインスタンスを使用してオブジェクトを作成すると便利です。
+
+従って、クラスは `__init__()` という名前の特別なメソッドを定義する場合があります。
+
+このような: 
+
+
+```python
+class MyClass:
+    def __init__(self):
+        self.data = []
+```
+`__init__` はPython で予約されているメソッドの1つです。
+
+定義されている場合、 `__init__()` メソッドは、クラスのインスタンスが作成されるときに自動的に呼び出され、オブジェクトとその属性を初期化します。
+
+それは常に少なくとも 1つの引数 `self` を取ります。
+
+従って、この例では、初期化された新しいインスタンスは次の方法で取得できます:
+
+```python
+x = MyClass()
+```
+
+ `__init__()` メソッドは、柔軟性を高めるために引数を受け取る場合があります。
+その場合、クラスインスタンス化演算子に与えられた引数は `__init__()` に渡されます。
+
+例えば:
+
+```python
+class Complex:
+    def __init__(self, real_part, imag_part):
+        self.r = real_part
+        self.i = imag_part
+        self.num = complex(self.r, self.i)
+
+x = Complex(3.0, -4.5)  # Instantiating a complex number
+x.num
+```
+```text
+(3-4.5j)
+```
+
+コードエディタで、`Car` クラスの `__init__()` メソッドにパラメータを追加します。
+指定された色とブランドで作成します。
+
+<div class='hint'> <code>self</code> と <code>color</code> の 2つのパラメータを追加します。</div>
diff -Naur "a/Classes and objects/The self parameter/task.md" "b/Classes and objects/The self parameter/task.md"
--- "a/Classes and objects/The self parameter/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Classes and objects/The self parameter/task.md"  2022-04-09 23:02:37.682574653 +0900
@@ -0,0 +1,35 @@
+## 自己パラメータ :(The self parameter)
+
+前の課題で見た `self` パラメータを説明する時が来ました。
+
+クラスメソッドに渡される最初の引数は `self` です。これは単なる慣例にすぎません。
+`self` という名前はPython にとって特別な意味はありません。
+
+規則に従うことをお勧めします。そうしないと、他のPython プログラマーがコードを読みにくくなる可能性があります。
+
+Python は `self` パラメータを使用して、作成または変更されたオブジェクトを参照します。
+
+メソッドは、`self` 引数のメソッド属性を使用して他のメソッドを呼び出すことができます:
+
+```python
+class Bag:
+    def __init__(self):
+        self.data = []
+
+    def add(self, x):
+        self.data.append(x)
+
+    def addtwice(self, x):
+        self.add(x)  # Calling the method `add` from another method
+        self.add(x)
+```
+
+コードエディタで、`Calculator` クラスの `add` メソッドを実装します。
+フィールド `current` に `amount` を追加する必要があります。
+
+さらに、メソッド `get_current` を完了します。
+
+コードを実行して、どのように機能するかを確認します。
+
+<div class='hint'> <code>amount</code> を <code>self.current</code> 変数に追加します。</div>
+<div class='hint'> <code>+=</code> 記号を使用します。</div>
diff -Naur "a/Classes and objects/Update variable/task.md" "b/Classes and objects/Update variable/task.md"
--- "a/Classes and objects/Update variable/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Classes and objects/Update variable/task.md" 2022-04-09 23:02:37.682574653 +0900
@@ -0,0 +1,11 @@
+## 変数を更新 :(Update variable)
+
+この演習では、新しい `Car` オブジェクト `car2` を作成してから、`car2` の `color` を `"red"` に設定します。
+
+`description` メソッドを呼び出して、`car1` と `car2` の説明を出力します。
+
+<div class='hint'>クラスを「呼び出す」ことにより、前の課題でオブジェクトをインスタンス化した方法を思い出してください。</div>
+
+<div class='hint'>値の割り当て (<code>=</code>) と属性参照構文 <code>obj.attribute</code>を使用して色を変更します。</div>.
+
+<div class='hint'> printステートメントで、前の課題で行ったように <code>description()</code> メソッドを呼び出します。</div>
diff -Naur "a/Classes and objects/Variable access/task.md" "b/Classes and objects/Variable access/task.md"
--- "a/Classes and objects/Variable access/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Classes and objects/Variable access/task.md" 2022-04-09 23:02:37.682574653 +0900
@@ -0,0 +1,27 @@
+## 可変アクセス :(Variable access)
+
+「属性参照」を使用して、オブジェクト内の変数にアクセスできます。
+
+「属性参照」は、Python のすべての属性参照に標準の構文 `obj.name` を使用します。
+
+有効な属性名は、クラスオブジェクトが作成されたときにクラスの名前空間にあったすべての名前です。
+
+従って、クラス定義が次のようになっている場合:
+
+```python
+class MyClass:
+    year = 2021
+
+    def say_hello(self):
+        return 'hello world'
+```
+
+`MyClass.year` と `MyClass.say_hello` は、それぞれ整数と関数オブジェクトを返す有効な「属性参照」です。
+
+クラス属性を割り当てることができるため、割り当てによって `MyClass.year` の値を変更できます。
+
+例を確認して、`my_object` から `variable1` の値を出力してください。
+
+オブジェクト `my_object` の `foo` メソッドを呼び出し、結果を出力します。
+
+<div class='hint'> <code>object.name</code> 構文を使用して<code>variable1</code> にアクセスします。</div>
diff -Naur "a/Classes and objects/__str__ vs __repr__/task.md" "b/Classes and objects/__str__ vs __repr__/task.md"
--- "a/Classes and objects/__str__ vs __repr__/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Classes and objects/__str__ vs __repr__/task.md" 2022-04-09 23:02:37.682574653 +0900
@@ -0,0 +1,56 @@
+## \_\_str__ と \_\_repr__ メソッド :(\_\_str__ vs \_\_repr__ methods)
+
+Python の `str()` メソッドと `repr()` メソッドは、どちらもオブジェクトの文字列表現に使用されますが、いくつかの違いがあります。
+
+例えば:
+
+```python
+s = 'Hello World'
+print (str(s))
+print(repr(s))
+```
+```text
+Hello World
+'Hello World'
+```
+
+`repr()` 関数を使用して文字列を出力すると、引用符のペアで出力されます。
+
+`str()` はユーザーの出力を作成するときに使用され、
+`repr()` は通常デバッグと開発に使用されます。
+
+ `repr()` は明確に、`str()` が読み取り可能である必要があります。
+
+`__init__` と同様に、メソッド `__repr__` と `__str__` は Python で予約されています。
+
+`print()` ステートメントと `str()` 組み込み関数は、オブジェクトのクラスで定義された `__str__` メソッドを使用して、その文字列表現を表示します。
+
+`repr()` 組み込み関数は、オブジェクトのクラスで定義された `__repr__` メソッドを使用します。
+
+従って、デバッグ用の詳細情報が必要な場合は、独自に定義したクラスに `__repr__` が必要です。
+
+また、ユーザーに文字列表現を使用すると便利だと思われる場合は、`__str__` 関数を作成する必要があります。
+
+
+コードエディタでクラス `Complex` の別の実装を確認してください。
+
+コードを実行して、2つの `print` ステートメントのそれぞれが何を出力するかを確認します。
+
+クラス `Cat` に `__str__` メソッドと `__repr__` メソッドを実装します。
+
+`__str__` メソッドは次のような文字列を返す必要があります:
+
+`"My siamese cat's name is Lucy"`
+(`"私のシャム猫の名前はルーシーです"`)
+
+`__repr__` メソッドは次のような文字列を返す必要があります: 
+
+`"Cat, breed: siamese, name: Lucy"`
+(`"猫, 品種: シャム, 名前: ルーシー"`)
+
+[f-strings](course://Strings/F-strings) を使用します。
+
+<div class='hint'> <code>self.attribute</code> 構文を使用することを忘れないでください。</div>
+
+<div class='hint'> アポストロフィを出力するために文字がエスケープされることを忘れないでください。</div>
+
diff -Naur "a/Condition expressions/Boolean operators/task.md" "b/Condition expressions/Boolean operators/task.md"
--- "a/Condition expressions/Boolean operators/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Condition expressions/Boolean operators/task.md" 2022-04-09 23:02:37.686574694 +0900
@@ -0,0 +1,11 @@
+## ブール演算子 :(Boolean operators)
+
+ブール演算子はステートメントを比較し、結果をブール値で返します。
+
+ブール演算子 `and` は、`and` の両側の式が `True` の場合、`True` を返します。  
+ブール演算子 `or` は、`or` のいずれかの側の少なくとも1つの式が `True` である場合、`True` を返します。  
+ブール演算子 `not` は、先行するブール式を反転します。
+
+`name` が `"John"` と等しく、彼が `16` 以上の場合、`True` と評価される式を記述します。
+
+<div class='hint'> <code>and</code> キーワードと <code>>=</code> 演算子を使用します</div>
diff -Naur "a/Condition expressions/Boolean operators order/task.md" "b/Condition expressions/Boolean operators order/task.md"
--- "a/Condition expressions/Boolean operators order/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Condition expressions/Boolean operators order/task.md"   2022-04-09 23:02:37.686574694 +0900
@@ -0,0 +1,9 @@
+## ブール演算子の順序 :(Boolean operators order)
+
+ブール演算子は左から右に評価されません。ブール演算子の演算の順序があります。
+
+`not` が最初に評価され、` and` が次に評価され、`or` が最後に評価されます。
+
+`name` が `16` 以上で `25` より若い `"John"` または `"Jane"` のいずれかである場合、`True` と評価される式を記述します。
+
+<div class='hint'> <code>and</code> と <code>or</code> キーワードを組み合わせます。</div>
diff -Naur "a/Condition expressions/Else and elif parts in if statement/task.md" "b/Condition expressions/Else and elif parts in if statement/task.md"
--- "a/Condition expressions/Else and elif parts in if statement/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Condition expressions/Else and elif parts in if statement/task.md"   2022-04-09 23:02:37.686574694 +0900
@@ -0,0 +1,32 @@
+## else および elif ステートメント :(Else and elif parts in if statement)
+
+`elif` および `else` ステートメントは `if` ステートメントを補完します。
+
+0個以上の `elif` 部分があり、`else` 部分はオプションです。キーワード `elif` は「else if」の略で、過度のインデントを回避するのに役立ちます。
+
+<div class='hint'> <code>if … elif … elif …</code> シーケンスは、Java など他の言語で見られる <code>switch</code> または <code>case</code> ステートメントの代わりになります。</div>
+
+条件付き実行では、1つが `True` であることが判明するまで、式を1つずつ評価することにより、スイートの1つだけが選択されます。
+
+次に、そのスイートが実行され、`if` ステートメントの他の部分は評価されません。
+
+すべての式が `false` の場合、 `else` 句のスイート(存在する場合)が実行されます。
+
+```python
+a = 200
+b = 33
+if b > a:
+  print("b is greater than a")
+elif a == b:
+  print("a and b are equal")
+else:
+  print("a is greater than b")
+```
+```text
+a is greater than b
+```
+  
+`name` が `"John"` と等しい場合は `True` を出力し、そうでない場合は `False` を出力します。
+
+<div class='hint'> <code>if</code> キーワードと <code>==</code> 演算子を使用します。</div>
+<div class='hint'> <code>else</code> キーワードを使用します。</div>
diff -Naur "a/Condition expressions/If statement/task.md" "b/Condition expressions/If statement/task.md"
--- "a/Condition expressions/If statement/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Condition expressions/If statement/task.md"  2022-04-09 23:02:37.686574694 +0900
@@ -0,0 +1,36 @@
+## If ステートメント :(If statement)
+
+Python の複合ステートメントには、他のステートメント(のグループ)が含まれています。
+それらは、何らかの方法でそれらの他のステートメントの実行に影響を与えるか、または制御します。
+
+おそらく最もよく知られているステートメントタイプは `if` ステートメントです。
+`if` キーワードは、その表現が `True` であるかどうかをチェックした後、指定されたコードを実行する条件ステートメントを形成するために使用されます。
+
+Python はインデントを使用してコードブロックを定義します:
+
+```python
+if value > 1000: 
+    print("It's a large number!")  # Indented block
+    a += 1                         # Indented block
+    
+print("Outside the block!")
+```
+
+コードブロックはインデントで始まり、インデントされていない最初の行で終わります。
+
+インデントの量は、ブロック全体で一貫している必要があります。
+通常、インデントには 4つの空白または 1つのタブが使用されます。
+
+インデントが正しくないと、`IndentationError` が発生します。
+
+実行するステートメントが 1つしかない場合は、それを `if` ステートメントと同じ行に配置できます:
+
+```python
+if a > b: print("a is greater than b")
+```
+
+`tasks` リストが空の場合は `"empty"` を出力します。
+リストがクリアされたら、もう一度確認し(別の条件が必要になる場合があります!)、
+そうである場合は `'Now empty!'` を出力します。
+
+<div class='hint'> <code>len()</code> 関数を使用して、 <code>tasks</code> が空かどうかを確認します。</div>
diff -Naur "a/Data structures/Dictionaries/task.md" "b/Data structures/Dictionaries/task.md"
--- "a/Data structures/Dictionaries/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/Dictionaries/task.md"    2022-04-09 23:02:37.690574737 +0900
@@ -0,0 +1,39 @@
+## 辞書 :(Dictionaries)
+
+辞書はリストに似ていますが、インデックスの代わりにキーを検索して値にアクセスする点が異なります。
+
+キーは任意の不変タイプにすることができます。
+文字列と数字は常にキーにすることができます。
+タプルに不変オブジェクトのみが含まれている場合は、タプルをキーとして使用できます。
+リストをキーとして使用することはできません。
+
+辞書を <code>key: value</code> のペアのセットと考えてください。
+
+ただし、キーは1つの辞書内で一意である必要があります。
+
+辞書は中かっこで囲まれています:
+
+例:  `dct = {'key1' : "value1", 'key2' : "value2"}`
+
+中括弧のペアは空の辞書 `{}` を作成します。
+
+辞書は、`dict` コンストラクター(constructor) を使用して作成することもできます:
+
+```python
+a = dict(one=1, two=2, three=3)
+b = {'one': 1, 'two': 2, 'three': 3}
+c = dict([('two', 2), ('one', 1), ('three', 3)])
+print(a == b == c)
+```
+```text
+True
+```
+リストの値にアクセスするのと同じようにディクショナリの値にアクセスできますが、インデックスの代わりにキーを使用します。
+
+このデータ構造の詳細については、<a href="https://docs.python.org/3/tutorial/datastructures.html#dictionaries">こちら</a> をご覧ください。
+
+Jared( `"Jared"`)の番号 `570` を電話帳に追加します。
+電話帳からGerard の番号を削除します。
+電話帳の `phone_book` から Jane(ジェーン)の電話番号を出力します。
+
+<div class='hint'>辞書のインデックスを使用します(例: <code>dct[key]</code></div>)
diff -Naur "a/Data structures/Dictionary keys() and values()/task.md" "b/Data structures/Dictionary keys() and values()/task.md"
--- "a/Data structures/Dictionary keys() and values()/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/Dictionary keys() and values()/task.md"  2022-04-09 23:02:37.690574737 +0900
@@ -0,0 +1,21 @@
+## 辞書の keys() と values()  :(Dictionary keys() and values())
+
+辞書には、`keys()`、`values()`、`items()` などの便利なメソッドがたくさんあります。
+
+`keys()` メソッドは、辞書内のすべてのキーのリストを挿入順に表示するビューオブジェクトを返します。
+
+`values()` は、ディクショナリの値の新しいビューを返します。
+
+`items()` メソッドが呼び出されると、辞書のアイテムの新しいビューがリスト内のタプル `(key, value)` ペアとして返されます。
+
+ `dict.keys()`、`dict.values()`、および `dict.items()` によって返されるオブジェクトは、ディクショナリのエントリの動的ビューを提供します。つまり、ディクショナリが変更されると、ビューはこれらの変更を反映します。
+
+&shortcut:CodeCompletion; を使用して残りを探索できます。
+
+ `dict_name` の後にドットが続きます。
+
+辞書がサポートする操作の詳細については、<a href="https://docs.python.org/3/library/stdtypes.html#typesmapping">こちら</a> をご覧ください。
+
+電話帳の `phone_book` からすべての値を出力します。
+
+<div class='hint'>メソッド <code>values()</code>を使用します。</div>
diff -Naur "a/Data structures/In keyword/task.md" "b/Data structures/In keyword/task.md"
--- "a/Data structures/In keyword/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/In keyword/task.md"  2022-04-09 23:02:37.690574737 +0900
@@ -0,0 +1,14 @@
+## In キーワード :(In keyword)
+
+`in` キーワードは、リストまたは辞書に特定の項目が含まれているかどうかを確認するために使用されます。
+文字列で行ったのと同じ方法で、リストまたは辞書に `in` を適用できます。
+
+
+1) `grocery_dict` の値に番号 `6` が含まれているかどうかを確認します。
+2) 辞書に `"basil"` (バジル)が含まれているかどうかを確認します。
+
+指定された順序で課題を完了してください。
+
+<div class='hint'> <code>in</code> キーワードを使用します。</div>
+
+<div class='hint'> <code>.values()</code> 属性と <code>.keys()</code> 属性を使用します。</div>
diff -Naur "a/Data structures/Join method/task.md" "b/Data structures/Join method/task.md"
--- "a/Data structures/Join method/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/Join method/task.md" 2022-04-09 23:02:37.686574694 +0900
@@ -0,0 +1,44 @@
+##  join() メソッド :(Join method)
+
+`.join()` は実際には文字列メソッドですが、文字列、リスト、タプルなどの反復可能なオブジェクトを理解する必要があるため、ここで説明します。
+
+この[メソッド](https://docs.python.org/3/library/stdtypes.html#str.join) は、反復可能なオブジェクトから文字列を作成するための柔軟な方法を提供します。
+
+iterable の各要素(list、string、tuple など)を文字列セパレータ(`join()` メソッドが呼び出される文字列)で結合し、連結された文字列を返します。
+
+iterable に文字列以外の値がある場合、`TypeError` が発生します。
+
+`join()` メソッドの構文は次のようになります:
+
+```python
+string.join(iterable)
+```
+
+例:
+
+```python
+string_ = 'abcde'  # a string iterable
+tuple_ = ('aa', 'bb', 'cc')  # a tuple iterable
+list_ = ['Python', 'programming language']  # a list iterable
+
+print(' + '.join(string_))  # join with the ' + ' separator
+print(' = '.join(tuple_))  # join with the ' = ' separator
+
+sep = ' is a '
+print(sep.join(list_))  # join with the ' is a ' separator
+```
+```text
+a + b + c + d + e
+aa = bb = cc
+Python is a programming language
+```
+`print` ステートメントが次のように出力するように `joined` 変数に値を割り当てます:
+
+```text
+I like apples and I like bananas and I like peaches and I like grapes
+```
+
+<div class='hint'>例をよく見て、同じことをしてください!</div>
+
+<div class='hint'><code>fruits</code>が反復可能であり、<code>separator</code> がセパレータ文字列です。</div>
+
diff -Naur "a/Data structures/List items/task.md" "b/Data structures/List items/task.md"
--- "a/Data structures/List items/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/List items/task.md"  2022-04-09 23:02:37.690574737 +0900
@@ -0,0 +1,13 @@
+## リストのアイテム :(List items)
+
+個々のリスト要素と同様に、リストのスライスに割り当てることができます。
+
+次のような操作を行うことで、リストのサイズを変更したり、リストを完全にクリアしたりすることもできます:
+
+```python
+animals[:] = []
+```
+  
+最後の 2つのアイテムを置き換えて、すべての `animals` の象 (elephants) を作ります。
+
+<div class='hint'>例のようにスライスへの割り当てを使用します。</div>
diff -Naur "a/Data structures/Lists introduction/task.md" "b/Data structures/Lists introduction/task.md"
--- "a/Data structures/Lists introduction/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/Lists introduction/task.md"  2022-04-09 23:02:37.690574737 +0900
@@ -0,0 +1,29 @@
+## リストの紹介 :(Lists introduction)
+
+Python には、データをグループ化するために使用されるいくつかの複合データ型があります。
+
+最も用途が広いのはリストです。
+これは、角かっこで囲まれた一連のカンマ区切りの値(アイテム)として記述できます。
+(例: `lst = [item1, item2]`)
+
+リストにはさまざまなタイプのアイテムが含まれている場合がありますが、通常、リスト内のすべてのアイテムは同じタイプです。
+
+文字列と同様に、リストにはインデックスを付けてスライスすることができます。
+([レッスン3](course:// Strings / Stringslicing)を参照)
+
+すべてのスライス操作は、要求された要素を含む新しいリストを返します。
+
+リストは、連結などの操作もサポートします:
+
+```python
+squares = [1, 4, 9, 16, 25]
+squares + [36, 49, 64, 81, 100]
+[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
+```
+
+リストの詳細については、<a href="https://docs.python.org/3.9/tutorial/introduction.html#lists">このページ</a> をご覧ください。
+
+リストスライスを使用して `[4, 9, 16]` を出力します。
+
+<div class='hint'>リストのスライス構文は、文字列の場合と同じように見えます: <code>lst[index1:index2]</code>
+インデックス <code>index2</code> の要素は含まれていないことを忘れないでください!</div>
diff -Naur "a/Data structures/Lists operations/task.md" "b/Data structures/Lists operations/task.md"
--- "a/Data structures/Lists operations/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/Lists operations/task.md"    2022-04-09 23:02:37.690574737 +0900
@@ -0,0 +1,35 @@
+## リストの操作 :(List operations)
+
+文字列とは異なり、リストは変更可能なタイプです。
+つまり、`lst[index] = new_item` を使用してコンテンツを変更できます。
+
+```python
+cubes = [1, 8, 27, 65, 125]  # something's wrong here
+4 ** 3  # the cube of 4 is 64, not 65!
+```
+```text
+64
+```
+```python
+cubes[3] = 64  # replace the wrong value
+cubes
+```
+```text
+[1, 8, 27, 64, 125]
+```
+ `append()` メソッドまたはリスト連結を使用して、リストの最後に新しいアイテムを追加できます。
+
+```python
+squares = [1, 4, 9, 16, 25]
+squares.append(6**2)
+squares
+```
+```text
+[1, 4, 9, 16, 25, 36]
+```
+
+<a href="https://docs.python.org/3/tutorial/datastructures.html#more-on-lists">このページ</a> で他の多くの便利なリストメソッドについて調べてください。
+
+`animals` リストの `"dino"` を `"dinosaur"` に置き換えます。
+
+<div class='hint'>リストのインデックス作成操作と値の割り当てを使用します。</div>
diff -Naur "a/Data structures/Nested Lists/task.md" "b/Data structures/Nested Lists/task.md"
--- "a/Data structures/Nested Lists/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/Nested Lists/task.md"    2022-04-09 23:02:37.690574737 +0900
@@ -0,0 +1,41 @@
+## ネストされたリスト :(Nested Lists)
+
+リストには、他のリスト(サブリスト)も含め、あらゆる種類のオブジェクトを含めることができます。
+このデータ構造は、「ネストされたリスト」と呼ばれます。
+
+ネストされたリストを使用して、データを階層構造に配置できます。
+
+ネストされたリストは、サブリストのコンマ区切りシーケンスを作成することで作成できます:
+
+```python
+nested_list = [[1, 2, 3], [4, 5], 6]
+```
+以前と同じように、インデックスを使用してネストされたリストのアイテムにアクセスできます:
+
+```python
+print(nested_list[1])
+print(nested_list[2])
+```
+Output:
+```text
+[4, 5]
+6
+```
+
+複数のインデックスを使用して、ネストされたリストのサブリスト内のアイテムにアクセスできます。
+`nested_list` から番号 `1` にアクセスするには、インデックス `0` を2回使用します。
+
+まず、要素 `[1,2,3]` にアクセスし、次にそのサブリストの最初の要素にアクセスします:
+
+```python
+print(nested_list[0][0])
+```
+Output:
+```text
+1
+```
+
+コードエディタで、インデックスを使用して、ネストされたリスト `my_list` の要素 `9` と `10` にアクセスして出力します。
+
+<div class='hint'>行き詰まった場合は、「課題の説明」ウィンドウにある例をもう一度確認してください。</div>
+
diff -Naur "a/Data structures/Tuples/task.md" "b/Data structures/Tuples/task.md"
--- "a/Data structures/Tuples/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Data structures/Tuples/task.md"  2022-04-09 23:02:37.698574822 +0900
@@ -0,0 +1,57 @@
+## タプル :(Tuples)
+
+タプルは、別の標準シーケンスデータ型を表します。
+
+それらはリストとほとんど同じです。
+タプルとリストの唯一の重要な違いは、タプルは不変であるということです。
+タプル内の要素を追加、置換、または削除することはできません。
+
+タプルは、括弧で囲まれたコンマ区切りの要素で構成されます。
+
+次に例を示します:
+
+```python
+(a, b, c)
+```
+ 
+特別な状況は、0 または 1個のアイテムを含むタプルの構築です。
+空のタプルは、空の括弧のペアで構成されます。
+1つの項目を持つタプルは、値の後にコンマを付けて作成されます。
+
+例えば:
+
+```python
+empty = ()
+singleton = 'hello',    # <-- note the trailing comma
+len(empty)
+```
+```text
+0
+```
+```python
+len(singleton)
+```
+```text
+1
+```
+```python
+singleton
+```
+```text
+('hello',)
+```
+
+ステートメント `t = 12345, 54321, 'hello!'` は、タプルパッキングの例です。
+
+値 `12345`、 `54321`、および `hello!` はタプルに一緒にパックされます。
+
+他のいくつかのリストメソッドもタプルに適用できます。
+
+タプルの詳細については、<a href="https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences">こちら</a> をご覧ください。
+
+タプル`alphabet` の長さを出力します。
+次に、単一の要素 `'fun_tuple'` を使用してタプルを作成します。
+コードを実行して、何が出力されるかを確認できます。
+
+<div class='hint'> <code>len()</code> 関数を使用します。</div>
+<div class='hint'>1つの要素を持つタプルの末尾のコンマを忘れないでください。</div>
diff -Naur "a/File input output/Open file/task.md" "b/File input output/Open file/task.md"
--- "a/File input output/Open file/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/File input output/Open file/task.md" 2022-04-09 23:02:37.698574822 +0900
@@ -0,0 +1,49 @@
+## ファイルを開く :(Open file)
+
+Python には、コンピューター上のファイルに対して情報を読み書きするための多数の組み込み関数があります。
+
+`open()` はファイルオブジェクトを返し、最も一般的には 2つの引数で使用されます: `open(filename, mode)`:
+
+```python
+f = open('somefile.txt', 'w')
+```
+
+最初の引数は、ファイル名を含む文字列です。 
+
+2番目の引数は、ファイルの使用方法を説明するいくつかの文字を含む別の文字列です。
+
+ファイルが読み取り専用の場合は `'r'`、書き込み専用の場合は `'w'`(同じ名前の既存のファイルは消去されます)、
+追加するときは `'a'`(ファイルに書き込まれたデータはすべてそのファイルの最後に追加されます)、でファイルを開きます。
+
+読み取りと書き込みの両方のの場合は `'r+'` 、でファイルを開きます。
+
+mode 引数はオプションです。省略した場合は `'r'` が想定されます。
+
+ファイルオブジェクトを処理するときは、`with` キーワードを使用することをお勧めします。
+利点は、コードスイートの終了後にファイルが適切に閉じられることです。
+
+```python
+with open('somefile.txt') as f:
+    read_data = f.read()
+
+#  We can check that the file has been automatically closed.
+f.closed
+```
+→ファイルが自動的に閉じられたことを確認できます。
+
+```text
+True
+```
+
+**重要**:  `with` キーワードを使用していない場合は、 `f.close()` を呼び出してファイルを閉じ、ファイルが使用しているシステムリソースを解放する必要があります。
+
+`with` ステートメントまたは `f.close()` の呼び出しによって、ファイルオブジェクトを閉じた後は使用できません。
+
+コードエディタで、 `with` ステートメントを使用して、ファイル `input1.txt` を読み取りモードで適切に開きます。
+次の行のファイルに使用されている名前を確認して使用してください。
+
+その後、開いた出力ファイル `outfile` を閉じます。
+
+コードを実行した後、他のファイルの中で「コースの表示」ウィンドウに表示された出力ファイルを確認してください。
+
+<div class='hint'>練習のためだけに!、 <code>r</code> 引数をメソッド <code>open()</code>に指定します。</div>
diff -Naur "a/File input output/Read file/task.md" "b/File input output/Read file/task.md"
--- "a/File input output/Read file/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/File input output/Read file/task.md" 2022-04-09 23:02:37.702574863 +0900
@@ -0,0 +1,62 @@
+## ファイルを読む :(Read file)
+
+ファイルの内容を読み取るには、 `f.read(size)` を呼び出すことができます。
+これは、ある量のデータを読み取り、それを文字列として返します。
+サイズが省略または負の場合、ファイルの内容全体が読み取られて返されます。
+
+```python
+with open('somefile.txt') as f:
+    print(f.read())
+```
+```text
+Here's everything that's in the file.\n
+```
+<i>**注**: ファイルがマシンのメモリの 2倍の大きさである場合、問題が発生します。</i>
+
+`f.readline()` はファイルから 1行を読み取ります。
+
+改行文字 (`\n`) は文字列の最後に残され、ファイルが改行で終わっていない場合にのみファイルの最後の行で省略されます。
+
+ `f.readline()` が空の文字列を返す場合、ファイルの終わりに達していますが、空白行は、単一の改行のみを含む文字列である`\n` で表されます。
+
+```python
+f.readline()
+```
+```text
+'This is the first line of the file.\n'
+```
+```python
+f.readline()
+```
+```text
+'Second line of the file\n'
+```
+```python
+f.readline()
+```
+```text
+''
+``` 
+
+ファイルから行を読み取るために、ファイルオブジェクトをループできます。
+これはメモリ効率が高く、高速で、コードをシンプルにします:
+
+```python
+for line in f:
+    print(line)
+```
+```text
+This is the first line of the file.
+Second line of the file
+```
+
+リスト内のファイルのすべての行を読み取りたい場合は、 `list(f)` または `f.readlines()` を使用することもできます。
+
+詳細については、Python チュートリアルの [ファイルオブジェクトのメソッド](https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects) のセクションを確認してください。
+
+「input.txt」の内容を表示して、ファイルの行を繰り返して出力します。
+次に、「input1.txt」の最初の行のみを出力します。
+
+<div class='hint'>「課題の説明」ウィンドウの例のようにファイルオブジェクトをループします。</div>
+<div class='hint'> <code>print</code> 関数を使用します。</div>
+<div class='hint'> <code>readline()</code> メソッドを使用して 1行を出力します。</div>
diff -Naur "a/File input output/What next/task.md" "b/File input output/What next/task.md"
--- "a/File input output/What next/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/File input output/What next/task.md" 2022-04-09 23:02:37.706574906 +0900
@@ -0,0 +1,17 @@
+おめでとうございます、コースは終了しました。楽しんでいただけたでしょうか。:(What next)
+
+一般的なフィードバックを残したい場合は、コースのマーケットプレイス[ページ](https://plugins.jetbrains.com/plugin/16630-introduction-to-python/reviews) にレビューを書いてください。
+
+貢献したい場合は、コースの[GitHubレポジトリ](https://github.com/jetbrains-academy/introduction_to_python) でプルリクエスト、または問題を自由に作成してください。
+
+### 次は何?
+
+Python プログラミングの基本を学んだので、さらに深く掘り下げて新しいスキルを磨くことができます。
+ここにあなたのためのいくつかのオプションがあります:
+
+- [NumPyのコース](https://plugins.jetbrains.com/plugin/18302-python-libraries--numpy) で、最も広く使用されているPython ライブラリについて学びます。
+- Pythonで[AMazing](https://plugins.jetbrains.com/plugin/17519-amazing) 迷路を構築する方法をご覧ください。
+- [機械学習](https://plugins.jetbrains.com/plugin/18392-machine-learning-101) の基本をご覧ください。
+- JetBrains Academy の[PythonCore](https://hyperskill.org/tracks/2) または [Python for Beginners](https://hyperskill.org/tracks/6) トラックでプロジェクトを確認してください。
+
+新しいコースとアップデートをお楽しみに!
diff -Naur "a/File input output/Write to file/task.md" "b/File input output/Write to file/task.md"
--- "a/File input output/Write to file/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/File input output/Write to file/task.md" 2022-04-09 23:02:37.702574863 +0900
@@ -0,0 +1,69 @@
+## ファイルに書き込む :(Write to file)
+
+すでに述べたように、 `open()` の 2番目の引数として `'w'` を使用すると、ファイルは書き込み専用で開きます。
+新しい空のファイルが作成されます。
+
+同じ名前の別のファイルがすでに存在する場合、そのファイルは消去されます。
+既存のファイルにコンテンツを追加する場合は、 `'a'` (追加)修飾子を使用する必要があります。
+
+別のファイルオブジェクトメソッド `f.write(string)` は、 <i>string</i> の内容をファイルに書き込み、書き込まれた文字数を返します。
+
+```python
+f.write('This is a test\n')
+```
+```text
+15
+```
+テキストモードの他のタイプのオブジェクトは、最初に文字列に変換する必要があります:
+
+```python
+value = ('the answer', 42)
+s = str(value)  # convert the tuple into string
+f.write(s)
+```
+```python
+18
+```
+指定したテキストがファイルのどこに挿入されるかは、ファイルモードによって異なります (`'a'` と `'w'`) 。
+
+`'a'`:  テキストはファイルの最後に挿入されます。
+
+`'w'`: テキストが最初に挿入される前に、ファイルは空になります。
+
+改行などの記号を文字列に含める場合(新しい行から開始する場合)、「+」を付けて追加します:
+
+```python
+f.write('\n' + 'string,' + ' ' + 'another string')
+```
+
+これにより、新しい行が追加され、 `'文字列、別の文字列'`が書き込まれます。
+
+コードエディタで、`zoo` リストのすべての要素を "output.txt" に追加して、
+出力が新しい行から追加され、要素が `' and '` で区切られるようにします。
+ <code>' and '.join(lst)</code> 構文を使用して、リスト要素を必要な文字列に結合します。
+その後、同じ出力ファイルに `number` を追加します。
+
+<div class='hint'> <code>'a'</code> 修飾子を使用して、ファイルの最後に行を追加します。 </div>
+<div class='hint'> <code>write()</code> メソッドを使用します。</div>
+<div class='hint'>書き込む前に <code>number</code> を文字列に変換します。</div>
+<div class='hint'>各文字列の先頭に <code>\n</code> を追加して、別の行を編集するように書き込みます。</div>
+
+
+## 次は何ですか?
+
+さて、Python の基本をマスターしたら、次に何をすべきか疑問に思っていることでしょう。
+
+[JetBrains Academy](https://hi.hyperskill.org?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) をチェックすることをお勧めします。
+
+JetBrains Academy を今すぐ試す理由は次のとおりです:
+
+- 現在、37 のPython プロジェクトと348 のトピックが学習に利用可能であり、その数は増え続けています。
+Kotlin やJava などの他のプログラミング言語も学習に利用できます。
+
+- さまざまな難易度のプロジェクトは、すべての人に柔軟な学習体験を提供します。
+
+- 包括的な学習トラックは、詳細な[ナレッジマップ](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) で補強されています。
+
+- どこでも学習: ブラウザを介してタブレットまたは携帯電話で学習を開始し、ラップトップまたはPC で続行できます。 [IDE でプロジェクトをビルド](https://hyperskill.org/plugin#python?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) することもできます。
+
+JetBrains Academy の[ここ](https://hyperskill.org/onboarding?track=python&utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) に参加して、自分で試してみてください。
diff -Naur "a/Functions/Args and kwargs/task.md" "b/Functions/Args and kwargs/task.md"
--- "a/Functions/Args and kwargs/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Functions/Args and kwargs/task.md"   2022-04-09 23:02:37.706574906 +0900
@@ -0,0 +1,49 @@
+## Args と kwargs :(Args and kwargs)
+
+`**name` 形式の最後の正式なパラメータが存在する場合、仮パラメータに対応するものを除くすべてのキーワード引数を含む辞書([データ構造 — 辞書](course://Data structures/Dictionaries) を参照)を受け取ります。
+
+これは、形式パラメータリスト以外の任意の数の位置引数を含むタプルを受け取る形式 `*name` の形式パラメータと組み合わせることができます。(`*name` は `**name` の前に出現する必要があります)
+
+例えば、コードエディタで次のような関数を定義すると、
+「call 1」に示すように呼び出すことができ、次のように出力されます:
+
+```text
+-- Do you know how to get to the Library ?  ←(図書館への行き方は ?)
+-- I'm sorry, I am not from here, no idea about the Library ←(図書館はわかりません)
+Do you at least have a cigar, sir?  ←(葉巻はありますか?)
+Sure, help yourself.  ←(助けてください。)
+----------------------------------------
+lost_person : old banker  ←(失われた人 : 古い銀行家)
+other_guy : street clown  ←(他の男 : ストリートピエロ)
+scene : in a park  ←(シーン:公園で)
+```
+
+この関数は、任意の数の引数を使用して呼び出すことができます。
+
+これらの引数はタプルにまとめられます。([タプル](course://Data structures/Tuples) を参照)
+
+可変の引数の前に、0個以上の通常の引数が発生する可能性があります。
+私たちの場合、「場所」が 1つあります。
+
+ `*args` パラメータの後に発生する正式なパラメータはすべて「キーワードのみ」の引数です。つまり、位置引数ではなくキーワードとしてのみ使用できます。
+
+この関数を呼び出す別の方法を「call 2」に示します。これにより、同じ出力が得られます。
+
+### 課題
+
+コードエディタで、 `cat()` 関数の下のコードを変更して、
+次のように出力します:
+
+```text
+-- This cat would eat if you gave it anything ←(この猫は何かを食べるでしょう)
+-- Lovely fur, the Maine Coon  ←(素敵な毛皮、メインクーン)
+-- It's fat !  ←(太っている!)
+IT IS TOO FAT.  ←(太りすぎです。)
+YOU ARE FEEDING YOUR CAT TOO MUCH.  ←(猫に与えすぎ)
+```
+
+<div class='hint'> <code>*</code> を使用して余分な位置引数をアンパックすることを忘れないでください。</div>
+
+<div class='hint'> <code>**</code> を使用してキーワード引数を解凍することを忘れないでください。</div>
+
+<div class='hint'> 正式なパラメータ<code>food</code> の値を指定することを忘れないでください。</div>
diff -Naur "a/Functions/Default parameters/task.md" "b/Functions/Default parameters/task.md"
--- "a/Functions/Default parameters/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Functions/Default parameters/task.md"    2022-04-09 23:02:37.710574948 +0900
@@ -0,0 +1,29 @@
+## デフォルトのパラメータ :(Default parameters)
+
+可変の引数で関数を定義することも可能です。
+
+組み合わせることができる 3つの形式があります。  
+最も便利な形式は、1つ以上の引数のデフォルト値を指定することです。
+
+これにより、定義されているよりも少ない引数で呼び出すことができる関数が作成されます。
+
+例えば、コードエディタの最初の関数を確認してください。
+
+この関数は、いくつかの方法で呼び出すことができます。
+
+- 必須の引数 `a` のみを与える: `multiply_by(3)`
+- オプションの引数の 1つを与える: `multiply_by(3, 47)`、または `multiply_by(3, c=47)`
+- またはすべての議論を与える: `multiply_by(3, 47, 0)`
+
+`c=47` の 3番目のケースで行ったように、関数呼び出しで提供する引数を指定できます。
+
+これを指定しない場合、値は順序に従って割り当てられます。
+
+関数呼び出しと定義では、`=` 記号の前後にスペースを入れないでください。
+
+このトピックについて詳しくは、Pythonドキュメントの <a href="https://docs.python.org/3/tutorial/controlflow.html#default-argument-values">このセクション</a> をご覧ください。
+
+### 課題
+`hello()` 関数にパラメータを追加し、`name` パラメータのデフォルト値を設定します。
+
+<div class='hint'> <code>name</code> パラメータのデフォルト値を指定します。</div>
diff -Naur a/Functions/Definition/task.md b/Functions/Definition/task.md
--- a/Functions/Definition/task.md  1970-01-01 09:00:00.000000000 +0900
+++ b/Functions/Definition/task.md  2022-04-09 23:02:37.706574906 +0900
@@ -0,0 +1,33 @@
+## 意味 :(Definition)
+
+関数は、コードを有用なブロックに分割し、より多くのものにするための便利な方法です。
+
+読み取り可能で、再利用できます。
+
+キーワード `def` は関数定義を導入します。
+
+その後に、関数名と仮パラメーターの括弧で囲まれたリスト(空の場合もあります)を続ける必要があります。
+
+関数の本体を形成するステートメントは次の行から始まり、インデントする必要があります。
+
+関数は、呼び出されたときにのみ実行されます。
+
+関数を呼び出すには、名前の後に括弧を付けて使用します:
+
+```python
+def my_function():  # function definition
+  print("Hello from a function")
+
+my_function()  # function call
+```
+
+関数の定義について詳しくは、Pythonドキュメントの <a href="https://docs.python.org/3/tutorial/controlflow.html#defining-functions">このセクション</a> をご覧ください。
+
+### 課題
+
+- ループ内で関数 `my_function` を呼び出して、その呼び出しを 5回繰り返します  
+- ファイル内の重複した `print` ステートメントを置き換えることができる関数を定義します。
+
+<div class='hint'> <code>()</code> を使用して <code>my_function</code> 関数を呼び出します。</div>
+
+<div class='hint'>Use the <code>def</code> キーワードを使用して、<code>fun</code> 関数を定義します。</div>
diff -Naur "a/Functions/Keyword Arguments/task.md" "b/Functions/Keyword Arguments/task.md"
--- "a/Functions/Keyword Arguments/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Functions/Keyword Arguments/task.md" 2022-04-09 23:02:37.706574906 +0900
@@ -0,0 +1,48 @@
+## キーワード引数 :(Keyword Arguments)
+
+関数は `kwarg=value` の形式のキーワード引数を使用して呼び出すこともできることをすでに示唆しました。
+
+例えば、私たちが定義した関数 `cat()` は、1つの必須引数(`food`)と 3つのオプションの引数(`state`、 `action`、および `breed`)を受け入れます。
+
+次のいずれかの方法で呼び出すことができます(すべて試してみることができます):
+
+```python
+cat('chicken')                     # 1 位置引数
+cat(food='chicken')                # 1 キーワード引数
+cat(food='fish', action='bite')    # 2 キーワード引数
+cat(action='bite', food='fish')    # 2 キーワード引数
+cat('beef', 'happy', 'hiss')       # 3 位置引数
+cat('a hug', state='purrring')     # 1 位置引数、1 キーワード引数
+```
+
+関数呼び出しでは、キーワード引数は位置引数の後に続く必要があります。
+
+渡されるすべてのキーワード引数は、関数によって受け入れられる引数の 1つと一致する必要があり(例えば、`book` は `cat` 関数の有効な引数ではありません)、それらの順序は重要ではありません。
+
+これには、オプションではない引数も含まれます。(例えば、`cat(food='fish')` も有効です)。
+
+引数が値を複数回受け取ることはできません。
+
+次のすべての呼び出しは無効になります:
+
+```python
+cat()                              # 必要な引数がありません
+cat(food='fish', 'dead')           # キーワード引数の後の位置引数
+cat('veggies', food='nothing')     # 同じ引数の値が重複しています
+cat(actor='Johnny Depp')           # 不明なキーワード引数
+```
+
+### 課題
+
+エディタで、引数を指定して関数呼び出しを行い、次のように出力します:
+
+```text
+-- This cat wouldn't growl if you gave it soup
+-- Lovely fur, the Sphinx
+-- It's still hungry!
+```
+
+<div class='hint'>キーワード引数には、<code>state='asleep'</code> などの構文を使用します。</div>
+
+<div class='hint'>キーワード引数として指定しない限り、必須の引数 <code>food</code> は最初の位置にある必要があります。</div>
+
diff -Naur "a/Functions/Parameters and call arguments/task.md" "b/Functions/Parameters and call arguments/task.md"
--- "a/Functions/Parameters and call arguments/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Functions/Parameters and call arguments/task.md" 2022-04-09 23:02:37.706574906 +0900
@@ -0,0 +1,45 @@
+## パラメータと呼び出し引数 :(Parameters and call arguments)
+
+「関数パラメータ」は、関数名に続く括弧 `()` 内で定義されます。
+
+「パラメータ」は、関数に渡される引数の変数名として機能します。
+
+「パラメータ」と「引数」という用語は同じものを指します。つまり、関数に渡される情報です。
+
+ただし、「パラメータ」は関数定義の括弧内にリストされている「変数」であり、「引数」は関数が呼び出されたときに関数に送信される「値」です。
+
+デフォルトでは、関数は正しい数の引数を使用して呼び出す必要があります。
+
+関数が 2つの引数を予期している場合は、2つの引数を使用して呼び出す必要があります:
+
+```python
+def my_function(name, surname):
+    print(name + " " + surname)
+
+my_function("Jon", "Snow")
+```
+
+結果:
+```text
+Jon Snow
+```
+
+ただし、呼び出し中に引数を 1つだけ指定すると、次のようになります:
+
+```python
+my_function("Sam")
+```
+
+`TypeError`が発生します:
+```text
+TypeError                                 Traceback (most recent call last)
+<ipython-input-29-40eb74e4b26a> in <module>
+----> 1 my_function('Jon')
+
+TypeError: my_function() missing 1 required positional argument: 'surname'
+```
+
+### 課題
+コードエディタで、渡されたパラメータの 2乗を出力する関数を定義します。
+
+<div class='hint'>関数定義の括弧内に <code>x</code> パラメーターを追加します。</div>
diff -Naur a/Functions/Recursion/task.md b/Functions/Recursion/task.md
--- a/Functions/Recursion/task.md   1970-01-01 09:00:00.000000000 +0900
+++ b/Functions/Recursion/task.md   2022-04-09 23:02:37.706574906 +0900
@@ -0,0 +1,70 @@
+## 再帰 :(Recursion)
+
+<b>recursion</b> という単語は、ラテン語の <i>recurrere</i> に由来します。  
+これは、戻る、元に戻す、または繰り返すことを意味します。
+
+プログラミングでは、再帰とは、関数がそれ自体を呼び出すコーディング手法を指します。
+
+ほとんどの場合、再帰は必要ありませんが、状況によっては、自己参照の定義が必要です。
+
+ツリーのようなデータ構造を使うことは良い例です。
+このような構造はネストされており、再帰的定義に容易に適合します。
+
+同じ課題の非再帰的アルゴリズムは非常に面倒です。
+
+これは再帰関数の簡単な例です。
+
+引数として数値を取り、指定された引数からゼロまでの数値を出力します。
+
+再帰呼び出しでは、引数は現在の `n` の値より1小さいため、各再帰は基本ケース(ゼロ)に近づきます。
+
+```python
+def countdown(n):
+    print(n, end=' ')
+    if n == 0:
+        return             # 再帰を終了
+    else:
+        countdown(n - 1)   # 再帰呼び出し
+
+
+countdown(4)
+```
+```text
+10 9 8 7 6 5 4 3 2 1 0 
+```
+
+<div class='hint'>この関数は引数の妥当性をチェックしません。<code>n</code> 
+が非整数または負の場合、 <code>RecursionError</code> が発生します。
+
+基本ケースに到達しないための例外:
+
+```python
+countdown(-10)
+```
+```text
+RecursionError: maximum recursion depth exceeded while calling a Python object
+```
+sys モジュールの関数を使用して、Python の再帰制限を確認できます。  
+`getrecursionlimit()` と呼ばれ、 `setrecursionlimit()` で変更できます:
+
+```python
+from sys import setrecursionlimit
+setrecursionlimit(3000)
+getrecursionlimit()
+```
+```text
+3000
+```
+</div>
+
+再帰はすべての状況で役立つわけではないことに注意してください。  
+一部の問題では、再帰的な解決策は可能ですが、エレガントというよりは厄介です。
+
+再帰的な実装は、非再帰的な実装よりも多くのメモリを消費することが多く、場合によっては実行が遅くなる可能性があります。
+
+### 課題
+コードエディタで、正の整数の[階乗](https://en.wikipedia.org/wiki/Factorial) を計算する再帰関数を実装します。
+
+1 と 0 の場合は 1 を返し、1つおきの数値については、この数値 (`n`) と前の数値の階乗 (`n-1`) の積を計算します。
+
+<div class='hint'>再帰関数呼び出しを忘れないでください。</div>
diff -Naur "a/Functions/Return value/task.md" "b/Functions/Return value/task.md"
--- "a/Functions/Return value/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Functions/Return value/task.md"  2022-04-09 23:02:37.710574948 +0900
@@ -0,0 +1,25 @@
+## 戻り値 :(Return value)
+
+関数は、キーワード `return` を使用して、呼び出し元に値を返す場合があります。
+戻り値を使用して変数に割り当てるか、単に出力することができます。
+
+実際、`return` ステートメントのない関数でも値を返します。
+
+この値は `None`(なし)と呼ばれます(組み込みの名前です)。
+
+値 `None` の書き込みは通常、インタープリタによって抑制されますが、
+本当に見たい場合は、 `print(some_func())` を使用できます。
+
+><i>関数本体の最初のステートメントは、オプションで文字列リテラルにすることができます。この文字列リテラルは、関数のドキュメント文字列または docstring です。  
+( docstring の詳細については、Pythonドキュメントの  <a href="https://docs.python.org/3/tutorial/controlflow.html#tut-docstrings">ドキュメント文字列</a> をご覧ください。)  
+作成するコードに docstring を含めることをお勧めします。</i>
+
+「フィボナッチ数列」では、最初の 2つの数字は `1` と `1` であり、その後はそれぞれ
+数値は前の 2つの合計です。
+
+### 課題
+`n` までの「フィボナッチ数列」の数のリストを返す関数を記述します。
+
+<div class='hint'> <code>b</code> を 1で初期化します。</div>
+<div class='hint'> <code>b</code> を <code>a + b</code>で更新します。</div>
+<div class='hint'> <code>a</code> を <code>tmp_var</code>で更新します。</div>
diff -Naur a/Introduction/About/task.md b/Introduction/About/task.md
--- a/Introduction/About/task.md    1970-01-01 09:00:00.000000000 +0900
+++ b/Introduction/About/task.md    2022-04-09 23:02:37.710574948 +0900
@@ -0,0 +1,29 @@
+## コースについて
+
+Python プログラミングの基礎のコースへようこそ!
+
+#### なぜ Python を学ぶのですか?
+
+Python は、世界で最も人気のあるプログラミング言語の1つです。
+Pythonは、データサイエンス、ML、AI で広く使用されており、最も急速に成長している主要なプログラミング言語です。
+ 
+これは、プログラミングに精通するための完璧な出発点です。
+Python は、他のほとんどのプログラミング言語よりも読み取り、書き込み、学習が簡単です。
+Python を使用すると、単純な初心者の課題にとらわれることはありません。
+多数の Python フォーラムと Q&A プラットフォーム、およびサポートを提供するオープンソースコミュニティは、学習意欲を維持するのに役立つ貴重なリソースです。
+
+#### コースの目的
+
+このコースを完了すると、次のことができるようになります。
+
+- 変数、データ構造、関数、クラスなどの基本的なプログラミングの概念を理解して利用できます。
+- Python コードを読めます。
+- Python で簡単なプログラムを作成できます。
+- Python モジュールおよびパッケージを操作できます。
+- 他のコースでPython を学び続け、より複雑な資料を提供します。
+
+#### 前提条件
+
+このコースを完了するために、Python やプログラミング全般の経験は必要ありません。
+
+頑張って!
diff -Naur a/Introduction/Comments/task.md b/Introduction/Comments/task.md
--- a/Introduction/Comments/task.md 1970-01-01 09:00:00.000000000 +0900
+++ b/Introduction/Comments/task.md 2022-04-09 23:02:37.714574991 +0900
@@ -0,0 +1,40 @@
+## コメント :(Comments)
+
+Python のコメントは、ハッシュ文字 (`#`) と単一のスペースで始まり、物理行の終わりまで続きます。
+
+ &shortcut:CommentByLineComment; を使うと、
+PyCharm の行全体またはコードブロックのコメントまたはコメント解除ができます。
+
+コードを変更したときは、常にコメントを最新の状態に保つことを優先してください。
+
+コードと矛盾するコメントは、コメントがない場合よりも悪いことです。
+また、不必要ですが、明白なことを述べている場合、実際にはかなり気が散ります。
+
+なので、これを行わないでください:
+
+```python
+x = x + 1                 # Increment x
+```
+コメントは完全な文章である必要があります。最初の単語は、小文字で始まる識別子でない限り、大文字にする必要があります。コメントが明確で、他の人にもわかりやすいものであることを確認してください。
+
+#### ブロックコメント :(Block Comments)
+
+ブロックコメントは通常、それに続く一部(またはすべて)のコードに適用され、そのコードと同じレベルにインデントされます。
+
+#### インラインコメント :(Inline Comments)
+
+インラインコメントは慎重に使用してください。
+インラインコメントは、ステートメントと同じ行のコメントです。
+インラインコメントは、ステートメントから少なくとも 2つのスペースで区切る必要があります。
+
+適切なコメントの詳細については、<a href="https://www.python.org/dev/peps/pep-0008/#comments">PEP 8 – Style Guide for Python Code</a> を参照してください。
+
+削除したくない場合は、コードの 1行またはブロックにコメントを付けることもできます。現時点では必要ありません。
+
+### 課題
+コードエディタで、出力しないことを示す `print` ステートメントで、行にコメントを付けます。
+コードが強調表示されなくなった様子を確認ください。
+
+<div class='hint'>
+  <code>#</code> とその <code>print</code> ステートメントの前にスペースを追加します。他はすべてそのままにしておきます。
+</div>
diff -Naur "a/Introduction/Course View/task.md" "b/Introduction/Course View/task.md"
--- "a/Introduction/Course View/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Introduction/Course View/task.md"    2022-04-09 23:02:37.714574991 +0900
@@ -0,0 +1,21 @@
+## コースの表示 :(Course View)
+
+<b>「コースの表示」</b> (Course) ウィンドウには、コースの項目が表示されます: 課題を含むレッスンの一覧です:
+
+<style>
+img {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+</style>
+<img src="edu_course_view.png" class="center" width="30%"/>
+
+名前をダブルクリックすると、任意の課題に移動できます。
+
+「コースの表示」ウィンドウを非表示にするには、「プロジェクトツール」のウィンドウ ボタンをクリックするか、 <span style="color: #509DD6">&shortcut:ActivateProjectToolWindow;</span> を押します。
+
+これにより、「編集エリア」ウィンドウと「課題の説明」ウィンドウ用のスペースが増えます。
+
+非表示の「コースの表示」ウィンドウを表示するには、[プロジェクトツールウィンドウ]ボタンをクリックします。または、<span style="color: #509DD6">&shortcut:ActivateProjectToolWindow;</span> を再び押します。
+
diff -Naur a/Introduction/Editor/task.md b/Introduction/Editor/task.md
--- a/Introduction/Editor/task.md   1970-01-01 09:00:00.000000000 +0900
+++ b/Introduction/Editor/task.md   2022-04-09 23:02:37.714574991 +0900
@@ -0,0 +1,24 @@
+## 編集エリア :(Editor)
+
+<b>「編集エリア」</b> (Editor) は、プログラミングを行うための遊び場です。チェックせずに理論的な課題やクイズに取り組んでいる間、ここで実験することができます。
+
+プログラミングの割り当ての場合、「編集エリア」は既存のコードを修正するか、独自のコードを最初から作成する場所です。このコードがチェックされます。
+
+<style>
+img {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+</style>
+<img src="edu_editor.png" class="center" width="60%"/>
+
+コードをいつでも実行するには、コンテキストメニューから[実行]オプションを選択するか、<span style="color: #509DD6">&shortcut:Run;</span> を押します:
+
+<img src="edu_context_menu_run.png" class="center" width="60%"/>
+
+
+「編集エリア」に戻ってコードに集中したい場合に、最も速いやり方は、[すべてのウィンドウを非表示]コマンド
+ (<span style="color: #509DD6">&shortcut:HideAllWindows;</span>) を使うことです。
+すべてのウィンドウを元に戻すには、コマンドを繰り返します。
+
diff -Naur "a/Introduction/Navigating Around/task.md" "b/Introduction/Navigating Around/task.md"
--- "a/Introduction/Navigating Around/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Introduction/Navigating Around/task.md"  2022-04-09 23:02:37.710574948 +0900
@@ -0,0 +1,25 @@
+## EduToolsプラグインの概要 :( EduTools plugin overview)
+
+このレッスンは、[EduTools プラグイン](https://www.jetbrains.com/help/education/educational-products.html) を使用して最初のステップを実行し、それを使用してPython を学習するのに役立ちます。
+
+EduTools プラグインを使用すると、コーディングタスクを完了してプログラミング言語とツールを学習し、IDE 内で即座にフィードバックを得ることができます。
+
+十分に話しましょう – 始めましょう!
+
+インターフェースに既に精通している場合は、このレッスンをスキップできます。
+
+### コースでの作業
+EduTools で利用できるすべてのコースは、レッスンのリストとして構成されています。
+次に、レッスンをセクションにグループ化できます。
+各レッスンにはいくつかの課題が含まれています。
+
+コースを開くと、ナビゲーションに使用されるメインのツールウィンドウが表示されます:
+
+<b>「コースの表示」</b>ウィンドウ  
+<b>「編集エリア」</b>ウィンドウ  
+<b>「課題の説明」</b>ウィンドウ
+
+<img src="edu_course_overview.png" width="100%"/>
+
+「Next」(次へ)ボタンをクリックして、次の課題に移動します。
+
diff -Naur "a/Introduction/Our first program/task.md" "b/Introduction/Our first program/task.md"
--- "a/Introduction/Our first program/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Introduction/Our first program/task.md"  2022-04-09 23:02:37.714574991 +0900
@@ -0,0 +1,29 @@
+## 私たちの最初のプログラム :(Our first program)
+
+従来、プログラミング言語で最初に作成するプログラムは `"Hello World!"` です。
+
+こちらでも紹介します。
+
+このスクリプトを実行するには、 **Editor** ビュー(編集画面)の任意の場所を「右クリック」して、
+コンテキストメニューを表示し、**実行 'hello_world'** を選択します。
+
+または、&shortcut:RunClass; ショートカットを使用することもできます。
+PyCharm Edu でのみ、![](execute.svg) 男の子アイコンを使用できます。
+
+詳細については、[私たちのヘルプ](https://www.jetbrains.com/help/pycharm/running-and-rerunning-applications.html) をご覧ください。
+
+## JetBrains アカデミー :(JetBrains Academy)
+
+この課題が難しすぎると思われる場合、または、より構造化された詳細なカリキュラムを探している場合は、
+ [JetBrains Academy](https://hi.hyperskill.org?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) を試してみることをお勧めします。
+
+JetBrains Academy を試す理由はたくさんあります。それらのほんの一部を次に示します:
+
+- 詳細な[ナレッジマップ](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) を含む包括的な学習トラック。
+
+- スキルレベルに合わせて柔軟な学習体験を提供する、さまざまな難易度のプロジェクト。
+
+- [専門能力開発ツール](https://hyperskill.org/plugin?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) を使用して練習し、習得することができます。
+
+Join JetBrains Academy の [こちら](https://hyperskill.org/onboarding?track=python&utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) に参加して、自分で試してみてください。
+
diff -Naur "a/Introduction/Task Description/task.md" "b/Introduction/Task Description/task.md"
--- "a/Introduction/Task Description/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Introduction/Task Description/task.md"   2022-04-09 23:02:37.714574991 +0900
@@ -0,0 +1,46 @@
+## 課題の説明 :(Task Description)
+
+**課題の説明** (Description) ウィンドウには、課題を完了するために必要なすべての情報が表示されます。
+
+理論的な課題の場合、説明は学習および読み物を提供します。  
+クイズの場合、それは複数の選択肢の質問を提供します。  
+プログラミングの割り当てについては、解決すべき問題が記載されています。
+
+次のアクションには、「課題の説明」ウィンドウのアイコンを使用します:
+
+|アイコン       |説明        |  
+| ------------------------------------ | ------------------------------- |  
+|**チェック**            | <font size="-1">クイズの回答 またはプログラム課題のコードが正しいか確認</font>|  
+| **実行**               | <font size="-1">コードを実行します(理論上の課題)</font>|  
+|![](images/back.svg)    |  <font size="-1">前のタスクに移動</font>|  
+|![](images/forward.svg) <font size="-1">または</font> **次へ** | <font size="-1">次のタスクに進む</font>|  
+|![](images/reset.svg)   | <font size="-1">タスクで行ったすべての変更を破棄し、最初からやり直します</font>|  
+|![](images/commentTask.svg) | <font size="-1">Stepikで課題ページを表示し、コメントを残してください</font>|  
+|<a>ソリューションのピーク...</a>| <font size="-1">正解を明らかにし、<b>差分</b>を表示します。</font>|  
+
+「課題の説明」ウィンドウを完全に非表示にせずに、表示したままにしておくことをオススメします。
+
+気が散る場合は、「課題の説明」ウィンドウの右上隅にある ![](images/hideToolWindow.svg) ボタンをクリックして非表示にできます。
+
+2台のモニタを使用する場合は、「課題の説明」ウィンドウ(パネル)をフローティングモードに切り替えて、2台目のモニタに移動するか、IDE のメインウィンドウの近くに配置すると便利な場合があります。
+
+これを行うには、ツールウィンドウの設定 ![](images/gear.svg) アイコンをクリックします:
+
+<img src="images/edu_task_description_window_settings.png" width="60%"/>
+
+<style>
+img {
+  display: inline !important;
+}
+table, th, td {
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+th, td {
+  padding: 5px;
+}
+table td:nth-child(1) {
+    text-align: center;
+}
+</style>
+
diff -Naur "a/Loops/Break keyword/task.md" "b/Loops/Break keyword/task.md"
--- "a/Loops/Break keyword/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/Break keyword/task.md" 2022-04-09 23:02:37.722575075 +0900
@@ -0,0 +1,14 @@
+## Break キーワード :(Break keyword)
+
+無限ループは、決して終了しないループです。
+ループ条件が常に`True`である場合、そのようなループは無限になります。
+
+無限ループを作成する最も簡単な方法は、`while True` を使用することです。
+`break` キーワードは、ループをエスケープするために使用されます。
+
+`animal` が `elephant` と等しいかどうかを評価した後、3回目の反復でループを終了する条件を記述します。
+ `break` ステートメントを使用します。
+最後の `zoo` リストには `lion` と `tiger` だけが含まれている必要があります(ループ内の他のすべてのものを `pop` するため)。
+
+<div class='hint'> <code>==</code> を使用して、<code>animal</code> が <code>"elephant"</code> と等しいかどうかを確認します。</div>
+
diff -Naur "a/Loops/Continue keyword/task.md" "b/Loops/Continue keyword/task.md"
--- "a/Loops/Continue keyword/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/Continue keyword/task.md"  2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,11 @@
+## continue キーワード :(Continue keyword)
+
+`continue` キーワードは、現在の反復でのみループ内の残りのコードをスキップし、次の反復に進むために使用されます。
+
+ループは `for` または `while` ステートメントに戻り、条件を再度評価します。
+次の項目がない場合、存在する場合は `else` 句が実行されます。
+
+奇数の `1、3、5、7、9` のみを出力します。
+
+<div class='hint'> <code>%</code> 演算子を使用して、<code>x</code> が偶数かどうかを確認します。</div>
+
diff -Naur "a/Loops/Else with loops/task.md" "b/Loops/Else with loops/task.md"
--- "a/Loops/Else with loops/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/Else with loops/task.md"   2022-04-09 23:02:37.722575075 +0900
@@ -0,0 +1,41 @@
+##  Else with ループ :(Else with loops)
+
+「それ以外の場合はループ」
+
+`break` ステートメントは、最も内側を囲む `for` または `while` ループから抜け出すことがわかりました。
+Python では、ループステートメントに `else` 句を含めることもできます。
+
+iterable の枯渇( `for` を使用)によってループが終了したとき、または条件が `False`( `while` を使用)になったときに実行されますが、ループが `break` ステートメントによって終了したときは実行されません。
+
+素数を検索するループの次の例を確認してください:
+
+```python
+for n in range(2, 10):
+    for x in range(2, n):
+        if n % x == 0:
+            print(n, 'equals', x, '*', n//x)
+            break
+    else:
+        # loop fell through without finding a factor
+        print(n, 'is a prime number')
+```
+```text
+2 is a prime number
+3 is a prime number
+4 equals 2 * 2
+5 is a prime number
+6 equals 2 * 3
+7 is a prime number
+8 equals 2 * 4
+9 equals 3 * 3
+```
+
+このコードでは、`else` 句は `if` ステートメントではなく、`for` ループに属しています。
+
+`if` ステートメントの後の `else` はスキップされ、 `if` に続く式が `True` の場合は実行されませんが、
+ループの場合、(どこかに「休憩」がない限り)`else` 句はループ自体が完了した後に実行されます。
+
+コードエディタで、2行目のコードを 2行目に追加して、ループが 1 と 2 の数字のみを出力し、
+`"for loop is done"` というフレーズを出力しないようにします。
+
+<div class='hint'>番号3で終了する必要があります。</div>
diff -Naur "a/Loops/For loop/task.md" "b/Loops/For loop/task.md"
--- "a/Loops/For loop/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/For loop/task.md"  2022-04-09 23:02:37.714574991 +0900
@@ -0,0 +1,16 @@
+## for ループ :(for loop)
+
+`for` ステートメントは、シーケンスの要素(文字列、タプル、リストなど)または別の反復可能なオブジェクトを反復処理するために使用されます。
+
+シーケンスは 1回評価されます。
+各反復で、`for` ループで定義された変数がリスト内の次の値に割り当てられます。
+`for`ステートメントの行に続くコードは、アイテムごとに 1回実行されます。
+アイテムが使い果たされると、ループは終了します。
+
+Pythonドキュメントの <a href="https://docs.python.org/3/reference/compound_stmts.html#the-for-statement"> このページ</a> で `for` ステートメントの詳細を読むことができます。
+
+`for` ループを使用して、`primes` リストから各素数を出力します。
+素数は `1` より大きい自然数であり、`1` とそれ自体以外に正の約数はありません。
+
+<div class='hint'> <code>for</code> ループを使用して、<code>primes</code> を反復処理し、各要素を1つずつ出力します。</div>
+
diff -Naur "a/Loops/List Comprehension/task.md" "b/Loops/List Comprehension/task.md"
--- "a/Loops/List Comprehension/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/List Comprehension/task.md"    2022-04-09 23:02:37.722575075 +0900
@@ -0,0 +1,52 @@
+## リスト内包 :(List Comprehension)
+
+ループを使用して、リスト(または別のデータ構造)を作成できます。
+
+例えば:
+
+
+```python
+my_list = []
+for i in range(5):
+    my_list.append(i)
+
+print(my_list)
+```
+
+出力:
+```text
+[0, 1, 2, 3, 4]
+```
+
+これは素晴らしいですが、かなりかさばります。
+
+リスト内包表記は、既存のリストまたは別の反復可能オブジェクト(タプル、文字列、配列、範囲など)の値に基づいて新しいリストを作成する場合に、よりコンパクトな構文を提供します。
+
+それは同じタスクを実行し、プログラムを簡素化します。
+通常、リスト内包表記は 1行のコードで記述されます。
+
+
+```python
+my_list = [i for i in range(5)]
+print(my_list)
+```
+出力:
+```text
+[0, 1, 2, 3, 4]
+```
+
+リスト内包表記は、`for` ループよりも計算効率が高くなります。
+
+コードエディタで、リスト内包表記を使用して、各要素に $10$ を追加することにより、
+`my_inefficient_list` の要素から `my_efficient_list` を作成します。
+
+例えば、`my_inefficient_list` の最初の要素は $1 + 10 = 11$ であるため、
+`my_efficient_list` の最初の要素は $11 + 10 = 21$ になります。
+
+<div class='hint'>
+
+上記の例では、 `i for i in range(5)` を使用しました。この式の中で、好きなように `i` を変更できます。
+
+例えば、すべての `i` から `5` を引くには、 `i - 5 for i in range(5)` に対して `i - 5` を実行できます。
+</div>
+
diff -Naur "a/Loops/Loop over a string/task.md" "b/Loops/Loop over a string/task.md"
--- "a/Loops/Loop over a string/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/Loop over a string/task.md"    2022-04-09 23:02:37.722575075 +0900
@@ -0,0 +1,10 @@
+## 文字列をループする :( Loop over a string)
+
+前に説明したように、Python の文字列は多くの点でリストに似ています。
+リストを反復処理するのと同じように、文字列を反復処理できます。
+
+ループを使用して、`hello_world` に含まれる文字数をカウントします。
+この数値を変数 `length` に格納します。
+
+<div class='hint'> <code>for</code> ループを使用して、<code>hello_world</code> 文字列を反復処理します。</div>
+
diff -Naur "a/Loops/Nested List Comprehension/task.md" "b/Loops/Nested List Comprehension/task.md"
--- "a/Loops/Nested List Comprehension/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/Nested List Comprehension/task.md" 2022-04-09 23:02:37.722575075 +0900
@@ -0,0 +1,49 @@
+## ネストされたリスト内包 :(Nested List Comprehension)
+
+「ネストされたリスト内包」は、他の「リスト内包」内のネストされた「リスト内包」です。
+
+これは「[ネストされたループ](course://Loops/Nested for Loop) 」と非常によく似ています。
+
+「ネストされたループ」を使用して「[ネストされたリスト](course://Data structures/Nested Lists) 」を構築するプログラムは次のとおりです:
+
+```python
+matrix = []
+
+for i in range(3):
+
+    # Append an empty sublist inside the list
+    matrix.append([])
+
+    for j in range(0, 10, 2):
+        matrix[i].append(j)
+
+print(matrix)
+```
+
+出力:
+```text
+[[0, 2, 4, 6, 8], [0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
+```
+
+「ネストされたリスト内包」表記を使用すると、同じことが 1行で実行できます:
+
+```python
+matrix = [[j for j in range(0, 10, 2)] for i in range(3)]
+print(matrix)
+```
+出力:
+```text
+[[0, 2, 4, 6, 8], [0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
+```
+
+### 課題
+
+各行(サブリスト)に `string` の **文字(characters)** 0〜9 が含まれるように、$10×10$ の `matrix` を作成します。
+リスト内包表記 (list comprehension) を使用して、1行のコードで課題を完了します。
+
+<div class='hint'>
+
+「課題の説明」ウィンドウの例に従ってください。範囲の 1つではなく、反復可能として `string` を使用する必要があります。
+
+</div>
+
diff -Naur "a/Loops/Nested for Loop/task.md" "b/Loops/Nested for Loop/task.md"
--- "a/Loops/Nested for Loop/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/Nested for Loop/task.md"   2022-04-09 23:02:37.722575075 +0900
@@ -0,0 +1,54 @@
+## ネストされたループ :(Nested Loops)
+
+ネストされたループは、別のループ内のループです。
+内側のループは、外側のループの反復ごとに 1回実行されます。
+
+```python
+adjectives = ["black", "stylish", "expensive"]
+clothes = ["jacket", "shirt", "boots"]
+
+for x in adjectives:
+  for y in clothes:
+    print(x, y)
+```
+出力:
+```text
+black jacket
+black shirt
+black boots
+stylish jacket
+stylish shirt
+stylish boots
+expensive jacket
+expensive shirt
+expensive boots
+```
+
+<details>
+
+どのタイプのループも別のループ内にネストできることに注意してください。
+例えば、 [`while` loop](course://Loops/While loop) (詳細を参照)は、`for` ループ内にネストできます。
+その逆も可能です。
+</details>
+
+3x3 の三目並べボードが与えられます。
+課題は、すべての位置を出力することです。
+各辺に沿った座標は、リスト `coordinates` に保存されます。
+
+出力は次のようになります:
+
+```text
+1 x 1
+1 x 2
+1 x 3
+2 x 1
+...
+```
+
+座標のすべての組み合わせについても同様です。
+
+<div class='hint'>
+
+ネストされた `for` ループで、同じリストをもう一度繰り返しますが、今回は別の変数名(`coordinate2`)を使用します。
+</div>
+
diff -Naur "a/Loops/While loop/task.md" "b/Loops/While loop/task.md"
--- "a/Loops/While loop/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Loops/While loop/task.md"    2022-04-09 23:02:37.722575075 +0900
@@ -0,0 +1,12 @@
+## while ループ :(while loop)
+
+`while` ループは `if` ステートメントにいくぶん似ています: ある条件が `True` の場合にコードを実行します。
+主な違いは、条件が `True` である限り、インデントされたコードを実行し続けることです。
+
+式が `False` の場合、ループは終了します。
+
+ `1` から `9`  `(1, 4, ... , 81)` までのすべての正方形を出力します。
+`while` ループで `number` 変数を使用します。
+
+<div class='hint'>条件で <code>number</code> が厳密に10未満であることを確認してください。</div>
+
diff -Naur "a/Modules and packages/Built-in modules/task.md" "b/Modules and packages/Built-in modules/task.md"
--- "a/Modules and packages/Built-in modules/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Modules and packages/Built-in modules/task.md"   2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,30 @@
+## 内蔵モジュール :(Built-in modules)
+
+Python には、[標準モジュールのライブラリ](https://docs.python.org/3/library/) が付属しています。
+
+一部のモジュールはインタープリタに組み込まれています。これらは、言語のコアの一部ではないが、効率のため、またはシステムコールなどのオペレーティングシステム プリミティブへのアクセスを提供するために組み込まれている操作へのアクセスを提供します。
+
+1つの特定のモジュールは注意に値します: `sys` 。これはすべての Python インタープリターに組み込まれています。
+
+変数 ` sys.ps1` および `sys.ps2` は、インタプリタがインタラクティブモードの場合にプライマリおよびセカンダリプロンプトとして使用される文字列を定義します:
+
+```text
+>>> import sys
+>>> sys.ps1
+'>>> '
+>>> sys.ps2
+'... '
+```
+
+変数 `sys.path` は、モジュールのインタープリタの検索パスを決定する文字列のリストです。
+課題のコードを実行すると何が出力されるか、を確認してください。
+
+&shortcut :CodeCompletion; (コード補完機能)を使用できることを忘れないでください:
+ドット (.) の後に、モジュールの使用可能なメソッドを調べます。
+
+標準モジュールの詳細については、<a href="https://docs.python.org/3/tutorial/modules.html#standard-modules">こちら</a> をご覧ください。
+
+インポートされた組み込みモジュール `datetime` を使用して現在の日付を出力します。
+
+ <div class='hint'> <code>datetime.datetime.today()</code> 関数を使用します。</div>
+
diff -Naur "a/Modules and packages/Executing modules as scripts/task.md" "b/Modules and packages/Executing modules as scripts/task.md"
--- "a/Modules and packages/Executing modules as scripts/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Modules and packages/Executing modules as scripts/task.md"   2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,66 @@
+## モジュールをスクリプトとして実行します :(Executing modules as scripts)
+
+Python モジュールは、実行可能ステートメントと関数またはクラスの定義を含むファイルです。
+
+これらのステートメントは、`import` ステートメントでモジュール名が最初に検出されたときに実行されます。
+ファイル名は、接尾辞 .py が追加されたモジュール名です。
+
+モジュール内では、モジュールの名前(文字列として)は、グローバル変数 `__name__` の値として使用できます。
+
+モジュールを**直接**(つまり、別のモジュールにインポートすることなく)実行すると、
+モジュール内のコードは、インポートした場合と同じように実行されますが、
+ `__name__` は `"__main__"` に設定されています。
+
+次のように `__name__` と `__main__` を使用できます:
+
+```python
+if __name__ == "__main__":
+   # Do something here
+```
+
+このブロック内のステートメントは、モジュールが直接実行され、別のモジュールへのインポートを介さない場合にのみ実行されます。例えば、2つのファイルについて考えてみましょう:
+
+main_program:
+```python
+import some_module
+
+print(f"main_program __name__ is: {__name__}")
+
+if __name__ == "__main__":
+   print("main_program executed directly")
+else:
+   print("main_program executed when imported")
+```
+
+some_module:
+```python
+print(f"some_module __name__ is: {__name__}")
+
+if __name__ == "__main__":
+   print("some_module executed directly")
+else:
+   print("some_module executed when imported")
+```
+
+`main_program` を実行した後の出力:
+```text
+some_module __name__ is: some_module
+some_module executed when imported
+main_program __name__ is: __main__
+main_program executed directly
+```
+
+`some_module` を実行した後の出力:
+```text
+some_module __name__ is: __main__
+some_module executed directly
+```
+`task.py`と`some_module.py`を変更して、task.py を実行したときに出力が次のようになるようにします:
+
+```text
+This is a message from some_module.
+This is a message from __main__.
+This is a message from the function in the imported module.
+This should be printed ONLY when task.py is called directly.
+```
+
diff -Naur "a/Modules and packages/From import/task.md" "b/Modules and packages/From import/task.md"
--- "a/Modules and packages/From import/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Modules and packages/From import/task.md"    2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,44 @@
+## インポート :(from import)
+
+import ステートメントの 1つの形式は、`from` の名前でモジュールから直接インポートします。
+このようにして、インポートされた `module_name` をプレフィックスなしで使用できます。
+
+例えば:
+
+```python
+from calculator import Add
+
+calc = Add()    # name `Add` used directly without prefix `calculator`
+```
+
+これは、インポートが取得されるモジュールの名前をローカルシンボルテーブルに導入しません(したがって、この例では、 `calculator` は定義されていません)。
+
+モジュールが定義するすべての名前をインポートするオプションもあります:
+
+```python
+from calculator import *
+calc = Multiply()
+```
+
+これにより、アンダースコア`_`で始まる名前を除くすべての名前がインポートされます。
+ほとんどの場合、Python プログラマーはこれを使用しません。
+これは、未知の名前のセットをインタープリターに導入し、既に定義したものを隠す可能性があるためです。
+
+モジュール名の後に `as` が続く場​​合、`as` に続く名前はインポートされたモジュールに直接バインドされます:
+
+```python
+import my_module as mm
+mm.hello_world()
+```
+
+これは、 `import my_module` が行うのと同じ方法でモジュールを効果的にインポートしますが、唯一の違いは `mm` として使用できることです。同様の効果を持つ `from` を利用する場合にも使用できます:
+
+```python
+from calculator import Subtract as Minus
+```
+
+`calculator` から `Calculator` クラスをインポートし、このクラスのインスタンスを作成します。
+この場合、正しくアクセスする方法を覚えておいてください:
+
+<div class='hint'>注: この <code>Calculator</code> クラスは、直接インポートしたので、プレフィックスなしで呼び出す必要があります。</div>
+
diff -Naur "a/Modules and packages/Import module/task.md" "b/Modules and packages/Import module/task.md"
--- "a/Modules and packages/Import module/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Modules and packages/Import module/task.md"  2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,29 @@
+## インポート モジュール :(Import module)
+
+プログラムが長くなると、メンテナンスを容易にするために、プログラムをいくつかのファイルに分割することをお勧めします。また、いくつかのプログラムで定義をコピーせずに、いくつかのプログラムで作成した便利な関数を使用することもできます。
+
+Python のモジュールは、Python の定義とステートメントを含む `.py` 拡張子を持つ単純な Python ファイルです。
+
+モジュールは、`import` キーワードと拡張子 `.py` のないファイル名を使用して他のモジュールからインポートされます。
+
+一連の関数( `func1`、` func2` など)を含む `my_funcs.py` というスクリプトを作成したとします。
+これで、同じディレクトリに配置されている別のスクリプトでそれらを使用する場合は、`import my_funcs` を実行できます。
+
+これは、 `my_funcs` で定義された関数の名前を直接インポートしませんが、モジュール名を使用して、次のように関数にアクセスできるようになります:
+
+```python
+my_funcs.func1()
+```
+モジュールは他のモジュールをインポートできます。
+慣例で行われていますが、すべてのインポートステートメントをモジュールの先頭に配置する必要はありません。
+
+Python チュートリアルの [このセクション](https://docs.python.org/3/tutorial/modules.html) を読むと、Python のモジュールについて詳しく知ることができます。
+
+コードエディタで、モジュール `calculator` をインポートし、クラス `Calculator` (`calc`) のインスタンスを作成します。
+
+ループ内の `Calculator` で定義された `add` メソッドを使用して、0 から 99 までの数値を合計します。
+
+<div class='hint'> <code>import</code> キーワードと <code>calculator</code> リファレンスを使用します。</div>
+<div class='hint'> <code>module.function()</code> などの構文を使用して、モジュールから関数にアクセスします。</div>
+<div class='hint'>関数に引数を指定することを忘れないでください。</div>
+
diff -Naur "a/Modules and packages/Packages/task.md" "b/Modules and packages/Packages/task.md"
--- "a/Modules and packages/Packages/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Modules and packages/Packages/task.md"   2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,47 @@
+## パッケージ :(Packages)
+
+パッケージは、「点線のモジュール名」を使用してPython のモジュール名前空間を構造化する方法です。
+
+例えば、モジュール名 `A.B` は、`A` という名前のパッケージ内の `B` という名前のサブモジュールを指定します。
+
+モジュールを使用することで、さまざまなモジュールの作成者が互いのグローバル変数名について心配する必要がなくなるのと同様に、点線のモジュール名を使用すると、[NumPy](https://numpy.org/) のようなマルチモジュールパッケージの作成者を省略できます。または [Pillow](https://pypi.org/project/Pillow/) は、互いのモジュール名を気にする必要がありません。
+
+<code>__init__.py</code> ファイルは、Python でファイルを含むディレクトリをパッケージとして処理するために必要です。これにより、<code> string </code> などの一般名のディレクトリが、モジュール検索パスの後半で発生する歪んだモジュールを意図せずに非表示にするのを防ぎます。最も単純なケースでは、<code>__init__.py</code> は空のファイルにすることができます。</div>
+
+私たちが作成したパッケージ `functions` と `classes` をチェックしてください。
+パッケージのユーザーは、パッケージから個々のモジュールをインポートできます。
+
+例を示します:
+
+```python
+import functions.greeting.hello
+```
+
+これにより、サブモジュール `functions.greeting.hello` がロードされます。フルネームで参照する必要があります:
+
+```python
+functions.greeting.hello.hello('Susan')
+```
+
+サブモジュールをインポートする別の方法は次のとおりです:
+
+```python
+from functions.greeting import hello
+```
+
+これにより、サブモジュール `hello` もロードされ、パッケージプレフィックスなしで使用できるようになるため、次のように使用できます:
+
+```python
+hello.hello('Susan')
+```
+パッケージの詳細については、Python ドキュメントの <a href="https://docs.python.org/3/tutorial/modules.html#packages">このページ</a> をご覧ください。
+
+コードエディタで、 `official` モジュールを適切にインポートして、最後の `print` ステートメントを機能させます。
+
+2番目の print ステートメントで、関数呼び出しを追加して(適切な関数を見つけて)、`'Alex'` に別れを告げます。
+
+<div class='hint'><code>package.subpackage.module</code> などの構文を使用してモジュールにアクセスします。</div>
+<div class='hint'><code>import module as something</code> などの構文を使用します。</div>
+<div class='hint'>インポートを確認してください: 2番目の課題に適切な機能を備えている可能性のあるインポートがあります。
+使用するときは注意してください。モジュールはすでに特定の名前でインポートされています。</div>
+
diff -Naur a/README.md b/README.md
--- a/README.md 1970-01-01 09:00:00.000000000 +0900
+++ b/README.md 2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,12 @@
+# 「Introduction to Python」コースの紹介(教育製品バージョン)[![official JetBrains project](http://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
+
+<p>これは、JetBrains Educational Products によるPython の入門コースです。
+対象読者は、プログラミングの経験がほとんどまたはまったくない、Python の学習を開始したい人々です。</p>
+
+<p>このコースでは、変数とその操作、文字列とその他のデータ構造、ブール演算子、条件、制御フローなどの基本について学習します。ループ、関数、クラスを実装し、コードの一部をインポートされたモジュールとして使用し、テキストファイルを操作してみます。</p>
+
+<p>楽しんで頑張ってください!</p>
+
+<p>P.S. 貢献したいですか?このコースにプルリクエストを送信してください
+<a href=”https://github.com/jetbrains-academy/introduction_to_python”>git リポジトリ</a>.</p>
+
diff -Naur "a/Strings/Basic string methods/task.md" "b/Strings/Basic string methods/task.md"
--- "a/Strings/Basic string methods/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/Basic string methods/task.md"    2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,17 @@
+## 基本的な文字列メソッド :(Basic string methods)
+
+多くの便利な文字列メソッドがあります。
+
+例えば、 `lower()` メソッドを使用して、文字列の大文字と小文字を削除できます。  
+`upper()` メソッドは、文字列を大文字にするために使用されます。
+
+文字列メソッドを呼び出すには、文字列(または文字列を含む変数)の後にドットを入力し、その後にメソッド名を入力します。(例: `"John".upper()`)
+
+PyCharm では、ドットを入力した後のショートカット( &shortcut:CodeCompletion; )を使用して、使用可能なすべての文字列メソッドを調べることができます。
+
+すべての文字列メソッドの詳細については、<a href="https://docs.python.org/3/library/stdtypes.html#string-methods">こちら</a> をご覧ください。
+
+適切な文字列メソッドを使用して、大文字で `monty_python` を出力します。
+
+<div class='hint'>コードで <code>lower()</code> メソッドがどのように使用されているかに注意してください。</div>
+
diff -Naur "a/Strings/Character escaping/task.md" "b/Strings/Character escaping/task.md"
--- "a/Strings/Character escaping/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/Character escaping/task.md"  2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,34 @@
+## キャラクターエスケープ :(Character escaping)
+
+バックスラッシュは、一重引用符や二重引用符などの特殊記号をエスケープするために使用されます。
+
+例えば、`"It\'s me"`(それは私です)、または `"She said \"Hello\""` (彼女は「こんにちは」と言った)などです。
+
+文字列の一部として実際に <code>\\</code> 文字を入力する必要がある場合は、それもエスケープする必要があります。
+
+例えば、単一の円記号を印刷する方法は次のとおりです:
+
+```python
+print('\\')
+```
+
+特殊記号 `'\n'` は文字列に「改行」を追加するために使用され、`'\t'` は「集計」を意味します。
+
+引用符には特別な意味があり、バックスラッシュを使用してエスケープすることもできます。
+
+文字列内に引用符を印刷する必要がある場合は、別の種類の引用符を使用してください。
+
+二重引用符で囲まれた文字列では、エスケープせずに一重引用符を使用できます。その逆も可能です。
+
+また、補足として、お気に入りの種類の引用符を選び、それらを一貫して使用することをお勧めします。
+
+エスケープの詳細については、Pythonドキュメントの <a href="https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals">このセクション</a> をご覧ください。
+
+1つの文字列を使用して次のテキストを出力します:
+
+```text
+The name of this ice cream is "Sweet'n'Tasty"  
+```
+
+<div class='hint'>バックスラッシュを使用して引用符をエスケープします。</div>
+
diff -Naur a/Strings/Concatenation/task.md b/Strings/Concatenation/task.md
--- a/Strings/Concatenation/task.md 1970-01-01 09:00:00.000000000 +0900
+++ b/Strings/Concatenation/task.md 2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,10 @@
+## 連結 :(Concatenation)
+
+一部の算術演算は非数値型にも適用できることを覚えていますか?
+
+`+` 記号を使用して 2つの文字列を組み合わせると、「連結」と呼ばれます。
+
+`hello` 変数と `world` 変数を使用して、文字列 `"Hello World"` を取得します。
+
+<div class='hint'>連鎖連結と単一スペース文字列 <code>" "</code> を使用します。</div>
+
diff -Naur a/Strings/F-strings/task.md b/Strings/F-strings/task.md
--- a/Strings/F-strings/task.md 1970-01-01 09:00:00.000000000 +0900
+++ b/Strings/F-strings/task.md 2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,36 @@
+## フォーマットされた文字列リテラル :(Formatted string literals)
+
+フォーマットされた文字列リテラル、または Fストリング (f-string) は、接頭辞 'f' または 'F' が付いた文字列リテラルです。これらの文字列には、中括弧 `{}` で区切られた式である置換フィールドが含まれる場合があります。
+
+中括弧の外側の文字列の部分は文字通り扱われます。  
+エスケープシーケンスは、通常の文字列リテラルのようにデコードされます。  
+置換式には改行を含めることができますが(トリプルクォート文字列など)、コメントを含めることはできません。  
+各式は、フォーマットされた文字列リテラルが表示されるコンテキストで、左から右の順に評価されます。
+
+いくつかの例を示します:
+
+```python
+name = "Fred"
+f"He said his name is {name}."
+```
+```text
+'He said his name is Fred.'
+```
+
+例えば、Fストリングで実行できるよりも凝ったことができます:
+
+```python
+f"{name.lower()} is funny."
+```
+
+```text
+'fred is funny.'
+```
+
+フォーマットされた文字列リテラルの詳細については、<a href="https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals"> Python Docs</a> を参照してください。
+
+自分で、Fストリングを作成してみてください。
+また、コードを実行して、何が出力されるかを確認してください。
+
+<div class='hint'> <code>name</code> 変数に割り当てられる値は文字列である必要があるため、<code>'Max'</code> のように引用符で囲む必要があります。</div>
+
diff -Naur "a/Strings/In operator/task.md" "b/Strings/In operator/task.md"
--- "a/Strings/In operator/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/In operator/task.md" 2022-04-09 23:02:37.734575202 +0900
@@ -0,0 +1,8 @@
+## In 演算子 :(In operator)
+
+文字列に特定の文字または部分文字列が含まれているかどうかを確認する場合は、`in` キーワードを使用できます。
+
+`"ice cream"`(アイスクリーム)に `"ice"`(アイス)があるかどうかを確認し、結果を変数 `contains` に割り当てます。
+
+<div class='hint'> <code>in</code> 演算子を使用します。</div>
+
diff -Naur "a/Strings/String formatting/task.md" "b/Strings/String formatting/task.md"
--- "a/Strings/String formatting/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/String formatting/task.md"   2022-04-09 23:02:37.730575159 +0900
@@ -0,0 +1,16 @@
+## 文字列のフォーマット :(String formatting)
+
+文字列の後の`%`演算子は、文字列を変数と組み合わせるために使用されます。  
+`%` 演算子は、文字列内の `%s` をその後に続く文字列変数に置き換えます。  
+`%d` 特殊記号は、数値または 10進値のプレースホルダーとして使用されます。
+
+> <i><b>注</b>: ここで説明する書式設定操作には、さまざまな癖があり、多くの一般的なエラーが発生します。
+> 新しい形式の文字列リテラル([さらに](course://Strings/F-strings) を参照)を使用して、<code><a href="https://docs.python.org/3/library/stdtypes.html#str.format">str.format()</a></code> インターフェース、
+> または <a href="https://docs.python.org/3/library/string.html#template-strings"> テンプレート文字列</a>は、これらのエラーを回避するのに役立つ場合があります。
+> これらの選択肢はそれぞれ、単純さ、柔軟性、および拡張性という独自のトレードオフと利点を提供します。</i>
+
+PyCharm にあなたが何歳かを伝えます(数字を使用)。
+
+<div class='hint'> <code>%d</code> 特殊記号を使用します。</div>
+<div class='hint'>あなたは何歳ですか?</div>
+
diff -Naur "a/Strings/String indexing/task.md" "b/Strings/String indexing/task.md"
--- "a/Strings/String indexing/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/String indexing/task.md" 2022-04-09 23:02:37.734575202 +0900
@@ -0,0 +1,17 @@
+## 文字列のインデックス作成 :(String indexing)
+
+文字列の位置がわかっている場合は、文字列内の文字にアクセスできます。
+
+例えば、 `str[index]` は、文字列 `str` の位置 `index` にある文字を生成します。
+
+文字列のインデックス作成は常に `0` から始まることに注意してください。
+文字列に `x` が見つからない場合、`index` は `ValueError` を発生させます。
+
+右から(つまり、文字列の終わりから)カウントを開始する必要がある場合は、インデックスが負の数になることもあります。
+
+`-0` は `0` と同じであるため、負のインデックスは `-1` から始まることに注意してください。
+
+インデックス演算子を使用して、`"Python"` から文字 `"P"` を取得します。
+
+<div class='hint'>インデックスは 0 で始まることに注意してください。</div>
+
diff -Naur "a/Strings/String length/task.md" "b/Strings/String length/task.md"
--- "a/Strings/String length/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/String length/task.md"   2022-04-09 23:02:37.734575202 +0900
@@ -0,0 +1,11 @@
+## 文字列の長さ :(String length)
+
+`len()` メソッドは、文字列に含まれる文字数をカウントするために使用されます。
+
+変数 `phrase` に格納されている文字列の前半を取得します。
+注: インデックスを取得するときは、型変換について覚えておいてください。
+
+<div class='hint'>文字列の最初から中間点までのスライスを取得する必要があります。</div>
+
+<div class='hint'>文字列の長さを 2で割って、中間のインデックスを取得します。除算の結果は整数である必要があります。</div>
+
diff -Naur "a/Strings/String multiplication/task.md" "b/Strings/String multiplication/task.md"
--- "a/Strings/String multiplication/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/String multiplication/task.md"   2022-04-09 23:02:37.734575202 +0900
@@ -0,0 +1,13 @@
+## 文字列の乗算 :(String multiplication)
+
+Python は、文字列ごとの乗算もサポートしています(ただし、その逆はサポートされていません)。
+
+`not_yet_food` 変数を使用して、`food` 変数に保存されている食品名を取得します。
+
+<div class='hint'>
+
+`"クス"`を`2`回繰り返すと`"クスクス"`になります。
+</div>
+
+<div class='hint'>乗算を使用します。</div>
+
diff -Naur "a/Strings/String negative indexing/task.md" "b/Strings/String negative indexing/task.md"
--- "a/Strings/String negative indexing/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/String negative indexing/task.md"    2022-04-09 23:02:37.734575202 +0900
@@ -0,0 +1,8 @@
+## 文字列の負のインデックス :(String negative indexing)
+
+すでに述べたように、負のインデックスを使用して、文字列の末尾から「逆方向」に文字をカウントできます。
+
+負のインデックスを使用して、`long_string` から `'!'` 記号を取得します。
+
+<div class='hint'>負のインデックスを使用します。</div>
+
diff -Naur "a/Strings/String slicing/task.md" "b/Strings/String slicing/task.md"
--- "a/Strings/String slicing/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Strings/String slicing/task.md"  2022-04-09 23:02:37.734575202 +0900
@@ -0,0 +1,32 @@
+## スライス :(Slicing)
+
+スライスは、文字列から複数の文字(サブ文字列)を抽出するために使用されます。
+
+その構文はインデックス作成の構文と似ていますが、1つのインデックスの代わりに、コロンで区切られた 2つのインデックス(数値)を使用します。(例: `str[ind1:ind2]`)
+
+これらの 2つのインデックスは、部分文字列の開始と終了に対応します。
+インデックスが `ind1` のシンボルは含まれますが、インデックスが `ind2` のシンボルは含まれないことに注意してください。
+
+Pythonでスライスがどのように機能するかを視覚的に示します:
+
+
+```text
++---+---+---+---+---+---+
+| P | y | t | h | o | n |
++---+---+---+---+---+---+
+0   1   2   3   4   5   6
+-6  -5  -4  -3  -2  -1
+```
+
+##### 例:
+<pre><code>
+str[start:end] # アイテムは最初から最後-1まで
+str[start:]    # アイテムは配列の残りの部分から始まります
+str[:end]      # 最初から最後-1 までのアイテム
+str[:]         # 配列全体のコピー
+</code></pre>
+
+スライスを使用して、`monty_python` 変数から `"Python"` を取得します。
+
+<div class='hint'>インデックスの 1つを空のままにしておくことができます。</div>
+
diff -Naur "a/Variables/Arithmetic operators/task.md" "b/Variables/Arithmetic operators/task.md"
--- "a/Variables/Arithmetic operators/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Variables/Arithmetic operators/task.md"  2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,39 @@
+## 算術演算子 :(Arithmetic operators)
+
+他のプログラミング言語と同じように、加算( `+` )、減算( `-` )、
+乗算( `*` )および除算( `/` )演算子は、数値とともに使用できます。
+さらに、Python には、累乗( `**` )、モジュロ( `%` )、およびフロア分割(`//` )演算子があります。
+
+- `*`(乗算)演算子は、その引数の積を生成します。
+引数は両方とも数値であるか、一方の引数が整数でもう一方がシーケンスである必要があります。
+
+- `/`(除算)および `//`(床除算)演算子は、引数の商を生成します。
+整数の除算はfloatを生成し、整数のフロア除算は整数を生成します。
+
+- `%`(モジュロ)演算子は、最初の引数を2番目の引数で除算した余りを返します。
+
+- `+`(加算)演算子は、その引数の合計を生成します。
+引数は、両方が数値であるか、両方が同じタイプのシーケンスである必要があります。
+
+- `-`(減算)演算子は、その引数の差を生成します。
+
+2進算術演算には、従来の優先度レベルがあります。
+これらの操作の一部は、特定の非数値タイプにも適用されることに注意してください。
+
+このトピックの詳細については、<a href="https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations">こちら</a>をご覧ください。
+
+### 課題
+- `number` に格納されている値を `2` で割ります。
+- そのような除算の余りを計算します。
+- 除算結果に `2` を掛けます。
+- 除算の余りを乗算結果に追加します。
+- 数値から乗算結果を減算します。
+- `number` を 2 でフロア分割します。
+- `multiplication_result` を 3 の累乗に上げます。
+
+<div class='hint'>まず、<code>/</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>%</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>*</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>+</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>-</code> 演算子を使用します。</div>
+
diff -Naur a/Variables/Assignments/task.md b/Variables/Assignments/task.md
--- a/Variables/Assignments/task.md 1970-01-01 09:00:00.000000000 +0900
+++ b/Variables/Assignments/task.md 2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,12 @@
+## 割り当て :(Assignments)
+
+拡張代入は、二項演算と代入ステートメントを組み合わせた単一のステートメントです( `+=`、 `-=` など)。
+
+`x += 1` のような拡張代入式は、`x = x + 1` と書き直して、同様の効果を得ることができます。
+この <a href="https://docs.python.org/3/reference/simple_stmts.html#augmented-assignment-statements">こちら </a> について詳しく読むことができます。
+
+### 課題
+拡張代入を使用して `5` を `number` に追加し、変数を更新します。
+
+<div class='hint'> <code>+=</code> 演算子を使用します。</div>
+
diff -Naur "a/Variables/Boolean operators/task.md" "b/Variables/Boolean operators/task.md"
--- "a/Variables/Boolean operators/task.md" 1970-01-01 09:00:00.000000000 +0900
+++ "b/Variables/Boolean operators/task.md" 2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,14 @@
+## ブール演算子 :(Boolean operators)
+
+ブール値は、`True`または`False`のみが可能な値のタイプです。
+ `==`(等式)演算子は 2つの変数を比較し、それらが等しいかどうかをチェックします。
+
+### 課題
+- 変数 `two` が `three` と等しいかどうかを確認します。
+- 変数 `is_equal` に不正な名前が付いているかどうかを確認します。
+- 変数 `is_false` に実際に嘘が含まれているかどうかを確認します。
+
+<div class='hint'> <code>==</code> 演算子を使用します。</div>
+<div class='hint'> <code>True</code> 値を使用します。</div>
+<div class='hint'> <code>False</code> 値を使用します。</div>
+
diff -Naur "a/Variables/Comparison operators/task.md" "b/Variables/Comparison operators/task.md"
--- "a/Variables/Comparison operators/task.md"  1970-01-01 09:00:00.000000000 +0900
+++ "b/Variables/Comparison operators/task.md"  2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,38 @@
+## 比較演算子 :(Comparison operators)
+
+Python には、次のような多くの種類の比較演算子があります:
+
+- `<` 未満
+  
+- `>`  より大きい
+  
+- `==` 等しい
+  
+- `>=` 以上
+  
+- `<=` 以下
+  
+- `!=` 等しくない
+
+演算子は、2つのオブジェクトの値を比較します。
+オブジェクトは同じタイプである必要はありません。
+
+Python のすべての比較演算の優先度は同じであり、算術演算、シフト演算、またはビット演算の優先度よりも低くなっています。比較すると、ブール値(`True` または `False`)が生成されます。
+
+比較は任意に連鎖させることができ、`a <b <c` のような式は、従来の数学的意味を持っています。
+
+比較の詳細については、 <a href="https://docs.python.org/3/reference/expressions.html#comparisons">こちら</a> をご覧ください。
+
+### 課題
+- 変数 `three` の値が変数 `two` の値よりも厳密に大きいかどうかを確認します。
+- 変数 `one` の値が変数 `three` の値よりも厳密に小さいかどうかを確認します。
+- 変数 `three` の値が、変数 `two` の値と変数 `one` の値の両方よりも厳密に大きいかどうかを確認します。
+- 変数 `one` が変数 `two` と等しくないかどうかを確認します。
+- 変数 `thee` がそれ自体と等しいかどうかを確認します。
+
+<div class='hint'> <code>></code> 演算子を使用します。</div>
+<div class='hint'> <code><</code> 演算子を使用します。</div>
+<div class='hint'> <code>></code> 演算子と <code><</code> 演算子の両方を使用します。</div>
+<div class='hint'> <code>!=</code>演算子を使用します。 </div>
+<div class='hint'> <code>==</code> 演算子を使用します。</div>
+
diff -Naur "a/Variables/Type conversion/task.md" "b/Variables/Type conversion/task.md"
--- "a/Variables/Type conversion/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Variables/Type conversion/task.md"   2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,15 @@
+## 型変換 :(Type conversion)
+
+あるデータ型を別のデータ型に変換できる組み込み関数がいくつかあります。
+これらの関数は、変換された値を表す新しいオブジェクトを返します。
+
+`int(x)` は `x` を整数に変換します。
+`float(x)` は `x` を浮動小数点数に変換します。
+ `str(x)` は、オブジェクト `x` を文字列表現に変換します。
+
+### 課題
+
+`float_number` を整数に変換します。
+
+<div class='hint'> <code>int()</code> 関数を使用します。</div>
+
diff -Naur "a/Variables/Undefined variable/task.md" "b/Variables/Undefined variable/task.md"
--- "a/Variables/Undefined variable/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Variables/Undefined variable/task.md"    2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,39 @@
+## 算術演算子 :(Arithmetic operators)
+
+他のプログラミング言語と同じように、加算( `+` )、減算( `-` )、
+乗算( `*` )および除算( `/` )演算子は、数値とともに使用できます。
+さらに、Python には、累乗( `**` )、モジュロ( `%` )、およびフロア分割(`//` )演算子があります。
+
+- `*`(乗算)演算子は、その引数の積を生成します。
+引数は両方とも数値であるか、一方の引数が整数でもう一方がシーケンスである必要があります。
+
+- `/`(除算)および `//`(床除算)演算子は、引数の商を生成します。
+整数の除算はfloatを生成し、整数のフロア除算は整数を生成します。
+
+- `%`(モジュロ)演算子は、最初の引数を 2番目の引数で除算した余りを返します。
+
+- `+`(加算)演算子は、その引数の合計を生成します。
+引数は、両方が数値であるか、両方が同じタイプのシーケンスである必要があります。
+
+- `-`(減算)演算子は、その引数の差を生成します。
+
+2進算術演算には、従来の優先度レベルがあります。
+これらの操作の一部は、特定の非数値タイプにも適用されることに注意してください。
+
+このトピックの詳細については、<a href="https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations">こちら</a>をご覧ください。
+
+### 課題
+- `number` に格納されている値を `2` で割ります。
+- そのような除算の余りを計算します。
+- 除算結果に `2` を掛けます。
+- 除算の余りを乗算結果に追加します。
+- 数値から乗算結果を減算します。
+- `number` を 2 でフロア分割します。
+- `multiplication_result` を 3 の累乗に上げます。
+
+<div class='hint'>まず、<code>/</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>%</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>*</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>+</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>-</code> 演算子を使用します。</div>
+
diff -Naur "a/Variables/Variable definition/task.md" "b/Variables/Variable definition/task.md"
--- "a/Variables/Variable definition/task.md"   1970-01-01 09:00:00.000000000 +0900
+++ "b/Variables/Variable definition/task.md"   2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,13 @@
+## 変数の定義 :(Variable definition)
+
+変数は値を格納するために使用されるため、後で参照できます。
+変数はラベルのようなものであり、Python では、代入演算子と呼ばれる '` =`' 記号を使用して、変数に値を割り当てます。
+
+割り当ては連鎖させることができます。(例: `a = b = 2`)
+
+### 課題
+- 変数 `greetings` に格納されている値を変更します。
+- チェーン代入を使用して、`a` と `b` の両方に 2 を格納します。
+
+<div class='hint'>回答プレースホルダーに新しい値を入力します。</div>
+
diff -Naur "a/Variables/Variable types/task.md" "b/Variables/Variable types/task.md"
--- "a/Variables/Variable types/task.md"    1970-01-01 09:00:00.000000000 +0900
+++ "b/Variables/Variable types/task.md"    2022-04-09 23:02:37.738575244 +0900
@@ -0,0 +1,28 @@
+## 変数タイプ :(Variable types)
+
+Python プログラムのすべてのデータは、オブジェクトまたはオブジェクト間の関係によって表されます。
+
+すべてのオブジェクトには、ID、タイプ、および値があります。
+オブジェクトのID は、一度作成されると変更されることはありません。
+これは、メモリ内のオブジェクトのアドレスと考えることができます。
+
+オブジェクトの `type` は、サポートする操作を決定し(たとえば、「長さはありますか?」)、そのタイプのオブジェクトに可能な値を定義します。
+
+`type()` 関数は、オブジェクトの型(オブジェクト自体)を返します。
+そのアイデンティティと同様に、オブジェクトのタイプも変更できません。
+
+一部のオブジェクトの値は変更される可能性があります。
+値が変更される可能性のあるオブジェクトは <i>mutable</i>(可変)です。
+作成後に値が変更できないオブジェクトは <i>immutable</i>(不変)と呼ばれます。
+
+Python には、整数と浮動小数点数の 2つの主要なタイプの数値があります。
+それらの最も重要な違いは、`float` は小数点のある数値であり、`int` は小数点のない数値であることです。
+
+このトピックの詳細については、Python ドキュメントの "<a href="https://docs.python.org/3/reference/datamodel.html#objects-values-and-types">オブジェクト、値、およびタイプ</a>" と "<a href="https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy">標準の型階層</a>" のセクションを参照してください。
+
+### 課題
+変数 `float_number` の型を出力します。
+
+<div class='hint'>
+2行目の <code>number</code> のタイプをどのように決定したかを確認し、<code>float_number</code> でも同じことを行います。</div>
+

→最後の空行も入れて、2552 行になりました。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ---

A-2. パッチファイルの適用:

-

1). パッチファイルの適用:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ patch -p1 < pycharm-ja.patch
:
patching file 'Classes and objects/Class and Instance Variables/task.md'
patching file 'Classes and objects/Definition/task.md'
patching file 'Classes and objects/Special __init__ method/task.md'
patching file 'Classes and objects/The self parameter/task.md'
patching file 'Classes and objects/Update variable/task.md'
patching file 'Classes and objects/Variable access/task.md'
patching file 'Classes and objects/__str__ vs __repr__/task.md'
patching file 'Condition expressions/Boolean operators/task.md'
patching file 'Condition expressions/Boolean operators order/task.md'
patching file 'Condition expressions/Else and elif parts in if statement/task.md'
patching file 'Condition expressions/If statement/task.md'
patching file 'Data structures/Dictionaries/task.md'
patching file 'Data structures/Dictionary keys() and values()/task.md'
patching file 'Data structures/In keyword/task.md'
patching file 'Data structures/Join method/task.md'
patching file 'Data structures/List items/task.md'
patching file 'Data structures/Lists introduction/task.md'
patching file 'Data structures/Lists operations/task.md'
patching file 'Data structures/Nested Lists/task.md'
patching file 'Data structures/Tuples/task.md'
patching file 'File input output/Open file/task.md'
patching file 'File input output/Read file/task.md'
patching file 'File input output/What next/task.md'
patching file 'File input output/Write to file/task.md'
patching file 'Functions/Args and kwargs/task.md'
patching file 'Functions/Default parameters/task.md'
patching file Functions/Definition/task.md
patching file 'Functions/Keyword Arguments/task.md'
patching file 'Functions/Parameters and call arguments/task.md'
patching file Functions/Recursion/task.md
patching file 'Functions/Return value/task.md'
patching file Introduction/About/task.md
patching file Introduction/Comments/task.md
patching file 'Introduction/Course View/task.md'
patching file Introduction/Editor/task.md
patching file 'Introduction/Navigating Around/task.md'
patching file 'Introduction/Our first program/task.md'
patching file 'Introduction/Task Description/task.md'
patching file 'Loops/Break keyword/task.md'
patching file 'Loops/Continue keyword/task.md'
patching file 'Loops/Else with loops/task.md'
patching file 'Loops/For loop/task.md'
patching file 'Loops/List Comprehension/task.md'
patching file 'Loops/Loop over a string/task.md'
patching file 'Loops/Nested List Comprehension/task.md'
patching file 'Loops/Nested for Loop/task.md'
patching file 'Loops/While loop/task.md'
patching file 'Modules and packages/Built-in modules/task.md'
patching file 'Modules and packages/Executing modules as scripts/task.md'
patching file 'Modules and packages/From import/task.md'
patching file 'Modules and packages/Import module/task.md'
patching file 'Modules and packages/Packages/task.md'
patching file README.md
patching file 'Strings/Basic string methods/task.md'
patching file 'Strings/Character escaping/task.md'
patching file Strings/Concatenation/task.md
patching file Strings/F-strings/task.md
patching file 'Strings/In operator/task.md'
patching file 'Strings/String formatting/task.md'
patching file 'Strings/String indexing/task.md'
patching file 'Strings/String length/task.md'
patching file 'Strings/String multiplication/task.md'
patching file 'Strings/String negative indexing/task.md'
patching file 'Strings/String slicing/task.md'
patching file 'Variables/Arithmetic operators/task.md'
patching file Variables/Assignments/task.md
patching file 'Variables/Boolean operators/task.md'
patching file 'Variables/Comparison operators/task.md'
patching file 'Variables/Type conversion/task.md'
patching file 'Variables/Undefined variable/task.md'
patching file 'Variables/Variable definition/task.md'
patching file 'Variables/Variable types/task.md'

→正常終了。このやり方は確実ですね。

-

2). 日本語化されたか確認:

-

(1). システムを再起動してから、「pycharm」を起動:

再起動させないと、キャッシュとメモリで相違があると表示される場合があります。 その場合はデフォルトの「システム(ディスク)からの読み込み」でOK

-

画面下のパネルの右にある「ギア」アイコンをクリック→「Toolbox」画面→「PyCharm Community」アイコンをクリック

→「PyCharm」で前回開いていた ファイル(タブ)が開きます。なので、学習コースの続きになります。

-

(2). 左の各項目の四角いアイコンの「課題名」をダブルクリック→翻訳が反映されます:

→再読込みされ、日本語で表示されました。

何かしらの修正を行ったら、再読込みが必要です。

-

(3). 日本語での学習が可能になりました

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----

A-3. 参考: (test3): パッチで新規にファイルを作る場合で、差分ファイルを作ったときの作業:

-

閲覧のみで、作業は要りません。

-

「項番 C」で日本語化された、プロジェクトのファイルを元にしました

-

1). 差分ファイルの作成の準備:

$ mkdir -p ~/ダウンロード/test3/{a,b}

-

2). フォルダのコピー:

$ cp -r ~/PycharmProjects/'Introduction to Python'/* ~/ダウンロード/test3/a
$ cp -r ~/PycharmProjects/'Introduction to Python'/* ~/ダウンロード/test3/b

-

3). 対象ファイルの抽出:

$ cd ~/ダウンロード/test3/

$ sudo find a -name "*.md" | sort

内容:

a/Classes and objects/Class and Instance Variables/task.md
a/Classes and objects/Definition/task.md
a/Classes and objects/Special __init__ method/task.md
a/Classes and objects/The self parameter/task.md
a/Classes and objects/Update variable/task.md
a/Classes and objects/Variable access/task.md
a/Classes and objects/__str__ vs __repr__/task.md
a/Condition expressions/Boolean operators order/task.md
a/Condition expressions/Boolean operators/task.md
a/Condition expressions/Else and elif parts in if statement/task.md
a/Condition expressions/If statement/task.md
a/Data structures/Dictionaries/task.md
a/Data structures/Dictionary keys() and values()/task.md
a/Data structures/In keyword/task.md
a/Data structures/Join method/task.md
a/Data structures/List items/task.md
a/Data structures/Lists introduction/task.md
a/Data structures/Lists operations/task.md
a/Data structures/Nested Lists/task.md
a/Data structures/Tuples/task.md
a/File input output/Open file/task.md
a/File input output/Read file/task.md
a/File input output/What next/task.md
a/File input output/Write to file/task.md
a/Functions/Args and kwargs/task.md
a/Functions/Default parameters/task.md
a/Functions/Definition/task.md
a/Functions/Keyword Arguments/task.md
a/Functions/Parameters and call arguments/task.md
a/Functions/Recursion/task.md
a/Functions/Return value/task.md
a/Introduction/About/task.md
a/Introduction/Comments/task.md
a/Introduction/Course View/task.md
a/Introduction/Editor/task.md
a/Introduction/Navigating Around/task.md
a/Introduction/Our first program/task.md
a/Introduction/Task Description/task.md
a/Loops/Break keyword/task.md
a/Loops/Continue keyword/task.md
a/Loops/Else with loops/task.md
a/Loops/For loop/task.md
a/Loops/List Comprehension/task.md
a/Loops/Loop over a string/task.md
a/Loops/Nested List Comprehension/task.md
a/Loops/Nested for Loop/task.md
a/Loops/While loop/task.md
a/Modules and packages/Built-in modules/task.md
a/Modules and packages/Executing modules as scripts/task.md
a/Modules and packages/From import/task.md
a/Modules and packages/Import module/task.md
a/Modules and packages/Packages/task.md
a/README.md
a/Strings/Basic string methods/task.md
a/Strings/Character escaping/task.md
a/Strings/Concatenation/task.md
a/Strings/F-strings/task.md
a/Strings/In operator/task.md
a/Strings/String formatting/task.md
a/Strings/String indexing/task.md
a/Strings/String length/task.md
a/Strings/String multiplication/task.md
a/Strings/String negative indexing/task.md
a/Strings/String slicing/task.md
a/Variables/Arithmetic operators/task.md
a/Variables/Assignments/task.md
a/Variables/Boolean operators/task.md
a/Variables/Comparison operators/task.md
a/Variables/Type conversion/task.md
a/Variables/Undefined variable/task.md
a/Variables/Variable definition/task.md
a/Variables/Variable types/task.md

→フォルダ名に半角スペースが含まれているので注意。

-

4). 対象ファイルを削除するシェルスクリプトを作成:

$ cd ~/ダウンロード/test3/
$ featherpad Delete-md-File.sh

内容:

#!/bin/bash
cd ~/ダウンロード/test3/
rm a/'Classes and objects/Class and Instance Variables/task.md'
rm a/'Classes and objects/Definition/task.md'
rm a/'Classes and objects/Special __init__ method/task.md'
rm a/'Classes and objects/The self parameter/task.md'
rm a/'Classes and objects/Update variable/task.md'
rm a/'Classes and objects/Variable access/task.md'
rm a/'Classes and objects/__str__ vs __repr__/task.md'
rm a/'Condition expressions/Boolean operators order/task.md'
rm a/'Condition expressions/Boolean operators/task.md'
rm a/'Condition expressions/Else and elif parts in if statement/task.md'
rm a/'Condition expressions/If statement/task.md'
rm a/'Data structures/Dictionaries/task.md'
rm a/'Data structures/Dictionary keys() and values()/task.md'
rm a/'Data structures/In keyword/task.md'
rm a/'Data structures/Join method/task.md'
rm a/'Data structures/List items/task.md'
rm a/'Data structures/Lists introduction/task.md'
rm a/'Data structures/Lists operations/task.md'
rm a/'Data structures/Nested Lists/task.md'
rm a/'Data structures/Tuples/task.md'
rm a/'File input output/Open file/task.md'
rm a/'File input output/Read file/task.md'
rm a/'File input output/What next/task.md'
rm a/'File input output/Write to file/task.md'
rm a/'Functions/Args and kwargs/task.md'
rm a/'Functions/Default parameters/task.md'
rm a/'Functions/Definition/task.md'
rm a/'Functions/Keyword Arguments/task.md'
rm a/'Functions/Parameters and call arguments/task.md'
rm a/'Functions/Recursion/task.md'
rm a/'Functions/Return value/task.md'
rm a/'Introduction/About/task.md'
rm a/'Introduction/Comments/task.md'
rm a/'Introduction/Course View/task.md'
rm a/'Introduction/Editor/task.md'
rm a/'Introduction/Navigating Around/task.md'
rm a/'Introduction/Our first program/task.md'
rm a/'Introduction/Task Description/task.md'
rm a/'Loops/Break keyword/task.md'
rm a/'Loops/Continue keyword/task.md'
rm a/'Loops/Else with loops/task.md'
rm a/'Loops/For loop/task.md'
rm a/'Loops/List Comprehension/task.md'
rm a/'Loops/Loop over a string/task.md'
rm a/'Loops/Nested List Comprehension/task.md'
rm a/'Loops/Nested for Loop/task.md'
rm a/'Loops/While loop/task.md'
rm a/'Modules and packages/Built-in modules/task.md'
rm a/'Modules and packages/Executing modules as scripts/task.md'
rm a/'Modules and packages/From import/task.md'
rm a/'Modules and packages/Import module/task.md'
rm a/'Modules and packages/Packages/task.md'
rm a/'README.md'
rm a/'Strings/Basic string methods/task.md'
rm a/'Strings/Character escaping/task.md'
rm a/'Strings/Concatenation/task.md'
rm a/'Strings/F-strings/task.md'
rm a/'Strings/In operator/task.md'
rm a/'Strings/String formatting/task.md'
rm a/'Strings/String indexing/task.md'
rm a/'Strings/String length/task.md'
rm a/'Strings/String multiplication/task.md'
rm a/'Strings/String negative indexing/task.md'
rm a/'Strings/String slicing/task.md'
rm a/'Variables/Arithmetic operators/task.md'
rm a/'Variables/Assignments/task.md'
rm a/'Variables/Boolean operators/task.md'
rm a/'Variables/Comparison operators/task.md'
rm a/'Variables/Type conversion/task.md'
rm a/'Variables/Undefined variable/task.md'
rm a/'Variables/Variable definition/task.md'
rm a/'Variables/Variable types/task.md'

-

5). 対象ファイルを削除するシェルスクリプトを実行:

$ cd ~/ダウンロード/test3/
$ bash Delete-md-File.sh

→これだと実行権限をファイルに与える作業($ chmod +x ./delete-md-file.sh)は要りません。

-

6). 差分ファイルの作成:

$ cd ~/ダウンロード/test3/
$ diff -Naur a b > pycharm-ja.patch
$ ls
delete-md-file.sh  a  b  pycharm-ja.patch

→「項番 A」で使うパッチファイル「pycharm-ja.patch」です。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -----

B. 参考: (test1): エラー回避を考えていない初期に、日本語化のパッチファイルを作ったときの作業:

-

閲覧のみで、作業は要りません。

-

一番最初の翻訳を終わらした時に、そのファイルから差分を作り、パッチファイルを作成したときの手順です。

md ファイル以外に更新されたファイルがあり、それを差分ファイルから取り除きました。 動作確認しながら翻訳したので、そのときに設定ファイルが変更されたと思われます。 削除しておかないと、パッチ適用したときに想定外の動きになります。

-

1). ファイル翻訳後の更新状態の確認:

$ cd ~/PycharmProjects/'Introduction to Python'/

$ ls -l
:
drwxrwxr-x  9 ubn ubn 4096  4月  2 13:44 'Classes and objects'
drwxrwxr-x  6 ubn ubn 4096  4月  2 13:44 'Condition expressions'
drwxrwxr-x 11 ubn ubn 4096  4月  2 13:44 'Data structures'
drwxrwxr-x  6 ubn ubn 4096  4月  2 13:44 'File input output'
drwxrwxr-x  9 ubn ubn 4096  4月  2 13:44  Functions
drwxrwxr-x  9 ubn ubn 4096  4月  2 13:44  Introduction
-rw-rw-r--  1 ubn ubn 1087  4月  2 13:44  LICENSE
drwxrwxr-x 11 ubn ubn 4096  4月  2 13:44  Loops
drwxrwxr-x  7 ubn ubn 4096  4月  2 13:44 'Modules and packages'
-rw-rw-r--  1 ubn ubn 1071  4月  5 12:53  README.md ←(これのみ更新あり)
drwxrwxr-x 13 ubn ubn 4096  4月  2 13:44  Strings
drwxrwxr-x 10 ubn ubn 4096  4月  2 13:44  Variables
-rw-rw-r--  1 ubn ubn 1257  4月  2 13:44  course-info.yaml
-rw-rw-r--  1 ubn ubn   72  4月  2 13:44  course-remote-info.yaml
$ ls -l Strings
:
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'Basic string methods'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'Character escaping'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44  Concatenation
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44  F-strings
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'In operator'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'String formatting'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'String indexing'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'String length'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'String multiplication'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'String negative indexing'
drwxrwxr-x 3 ubn ubn 4096  4月  2 13:44 'String slicing'
-rw-rw-r-- 1 ubn ubn  217  4月  2 13:44  lesson-info.yaml
-rw-rw-r-- 1 ubn ubn   61  4月  2 13:44  lesson-remote-info.yaml

→更新なし

$ ls -l Strings/F-strings/
:
-rw-rw-r-- 1 ubn ubn   75  4月  2 13:44 f_strings.py
-rw-rw-r-- 1 ubn ubn 2995  4月  2 13:44 task-info.yaml
-rw-rw-r-- 1 ubn ubn   57  4月  2 13:44 task-remote-info.yaml
-rw-rw-r-- 1 ubn ubn 1743  4月  5 19:57 task.md  ←(これのみ更新あり)
drwxrwxr-x 2 ubn ubn 4096  4月  2 13:44 tests

→翻訳した「.md」ファイルのみ更新されており、他のファイルは更新されていないみたい。

追記: 「.md」ファイルのみ更新されているつもりでしたが、設定ファイル(のステータスフラグ)が変更されていました。

-

2). 作業フォルダの準備:

$ cd ~/ダウンロード/
$ mkdir -p test1/{a,b}
$ ls ~/ダウンロード/test1/
a  b

-

3). コピー:

$ cp -r ~/PycharmProjects-ORG/'Introduction to Python'/* ~/ダウンロード/test1/a
$ cp -r ~/PycharmProjects/'Introduction to Python'/* ~/ダウンロード/test1/b

→「PycharmProjects-ORG」は最初にセットアップしたときのイメージを退避したときのフォルダです。

-

4). 差分ファイルに影響する、更新されたファイルはないか日時で確認:

-

(1).「task-info.yaml」が更新されていました:
"b/Introduction/Course View/task-info.yaml"
"b/Introduction/Editor/task-info.yaml"
"b/Introduction/Our first program/task-info.yaml"
"b/Introduction/Task Description/task-info.yaml"
"b/File input output/What next/task-info.yaml"

ステータス行が修正されています:

-status: Unchecked
+status: Solved

-

(2). 更新されたファイルを削除:

削除しないと、設定ファイルなので想定外の動きになります。 差分を取り除くには、比較する両方から削除する必要があります。

$ cd ~/ダウンロード/test1/a/
$ rm "Introduction/Course View/task-info.yaml"
$ rm "Introduction/Editor/task-info.yaml"
$ rm "Introduction/Our first program/task-info.yaml"
$ rm "Introduction/Task Description/task-info.yaml"
$ rm "File input output/What next/task-info.yaml"
$ cd ~/ダウンロード/test1/b/
$ rm "Introduction/Course View/task-info.yaml"
$ rm "Introduction/Editor/task-info.yaml"
$ rm "Introduction/Our first program/task-info.yaml"
$ rm "Introduction/Task Description/task-info.yaml"
$ rm "File input output/What next/task-info.yaml"

-

5). 差分ファイルの作成:

$ cd ~/ダウンロード/test1/
$ ls
a  b
$ diff -Naur a b > pycharm-ja.patch
$ ls
a  b  pycharm-ja.patch

→差分ファイルが作られました。

-

6). 出来上がった差分ファイルの場所:

$ ls ~/ダウンロード/test1/pycharm-ja.patch

-

7). 差分ファイル(パッチファイル)を配置すべき場所:

$ ls ~/PycharmProjects/'Introduction to Python'/
:
'Classes and objects'    'File input output'   LICENSE                 README.md   course-info.yaml
'Condition expressions'   Functions            Loops                   Strings     course-remote-info.yaml
'Data structures'         Introduction        'Modules and packages'   Variables

→「Introduction to Python」プロジェクトのルートです。

-

  • これまではパッチファイルを作成するための準備作業でした。

以降が実際に反映させる作業になります。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- -

B-2. 参考: (test1): パッチファイルの適用:

-

閲覧のみで、作業は要りません。

-

1). パッチファイルの作成:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ featherpad pycharm-ja.patch

貼り付ける内容は、「項番 C-3.の 3).」と同じ です。

内容は追加で改修されています。

-

2). パッチファイルの適用:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ patch -p1 < pycharm-ja.patch

→正常に完了すれば、「項番 A-2.の 1).」と同じメッセージが表示 されます。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- --

C. 参考: (test2): エラー回避を考えて、日本語化のパッチファイルを作ったときの作業:

-

閲覧のみで、作業は要りません。

-

パッチファイルの適用時に下記のエラーがあった場合の回避策のひとつです。

すでにパッチ作成の環境(翻訳未と翻訳済みのファイルがある環境)を削除していても、使える回避策です。

-

パッチファイルの適用で、「行末のコード」でエラーしました:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ patch -p1 < pycharm-ja.patch
:
patching file 'Classes and objects/Class and Instance Variables/task.md'
Hunk #1 FAILED at 1 (different line endings).
1 out of 1 hunk FAILED -- saving rejects to file 'Classes and objects/Class and Instance Variables/task.md.rej'

patching file 'Classes and objects/Definition/task.md'
Hunk #1 FAILED at 1 (different line endings).
1 out of 1 hunk FAILED -- saving rejects to file 'Classes and objects/Definition/task.md.rej'
:

→対象となるファイルで、パッチ作成前とパッチ適用時の「行末のコード」が違うというエラーです。

多くのファイルでエラーが表示されました。

-

課題ファイルは、Windows でもMac OS でも、Linux でも使われるデータ(テキストファイル)です。 Windows のテキストファイルの行末はCRLFで、Linux のテキストファイルの行末はLF です。

また、パッチ作成ツールでは、Linux では行末のコードが抜け落ちるツールもあるので、考えられる原因は色々です。

プログラムの世界ではLF かCRLF かの違いは結果に大きく影響することもあり、文字列およびコードの置換を行う、patch コマンドのチェックはきびしいです。なので、このようなエラーが発生すると思われます。

-

追記: ファイルの最後に改行コードがない場合もエラー(警告)となるようです:

今回作成したパッチファイルに、下記の警告の登録が数件ありました:

→「\ ファイル末尾に改行がありません」の文字列がパッチの適用で削除される側のお尻に追加されていました。

(翻訳するときは、各ファイルの最後に空行を付けておくのが無難です)

-

すべての対象ファイルの行末コードを事前に「削除」してから、パッチファイルを適用することでエラー回避できました:

→対象となるファイルで、パッチ作成前の状態でも、行末のコードが抜けた状態にすれば、エラーにはなりません。

→対象ファイルはひとつではなく、ファイルが多い上に、対象ファイルが置かれているファイル階層もそれぞれ違います。工夫が必要です。パッチで対応するのが楽です。

-


1). 差分ファイルの作成の準備:

$ mkdir -p ~/ダウンロード/test2/{a,b,ORG}

スクリプトの作成を楽にするために「ORG」フォルダを作っています。

-

2). フォルダのコピー:

$ cp -r ~/PycharmProjects-ORG/'Introduction to Python'/* ~/ダウンロード/test2/ORG
$ cp -r ~/PycharmProjects-ORG/'Introduction to Python'/* ~/ダウンロード/test2/a

→対象ファイルのコピーと対象の置かれたフォルダを作成する作業を兼ねます。

-

3). 行末の改行を削除するコマンドを作成:

(1). 対象ファイルの抽出:
$ cd ~/ダウンロード/test2/

$ sudo find ORG -name "*.md" | sort

内容:

ORG/Classes and objects/Class and Instance Variables/task.md
ORG/Classes and objects/Definition/task.md
ORG/Classes and objects/Special __init__ method/task.md
ORG/Classes and objects/The self parameter/task.md
ORG/Classes and objects/Update variable/task.md
ORG/Classes and objects/Variable access/task.md
ORG/Classes and objects/__str__ vs __repr__/task.md
ORG/Condition expressions/Boolean operators order/task.md
ORG/Condition expressions/Boolean operators/task.md
ORG/Condition expressions/Else and elif parts in if statement/task.md
ORG/Condition expressions/If statement/task.md
ORG/Data structures/Dictionaries/task.md
ORG/Data structures/Dictionary keys() and values()/task.md
ORG/Data structures/In keyword/task.md
ORG/Data structures/Join method/task.md
ORG/Data structures/List items/task.md
ORG/Data structures/Lists introduction/task.md
ORG/Data structures/Lists operations/task.md
ORG/Data structures/Nested Lists/task.md
ORG/Data structures/Tuples/task.md
ORG/File input output/Open file/task.md
ORG/File input output/Read file/task.md
ORG/File input output/What next/task.md
ORG/File input output/Write to file/task.md
ORG/Functions/Args and kwargs/task.md
ORG/Functions/Default parameters/task.md
ORG/Functions/Definition/task.md
ORG/Functions/Keyword Arguments/task.md
ORG/Functions/Parameters and call arguments/task.md
ORG/Functions/Recursion/task.md
ORG/Functions/Return value/task.md
ORG/Introduction/About/task.md
ORG/Introduction/Comments/task.md
ORG/Introduction/Course View/task.md
ORG/Introduction/Editor/task.md
ORG/Introduction/Navigating Around/task.md
ORG/Introduction/Our first program/task.md
ORG/Introduction/Task Description/task.md
ORG/Loops/Break keyword/task.md
ORG/Loops/Continue keyword/task.md
ORG/Loops/Else with loops/task.md
ORG/Loops/For loop/task.md
ORG/Loops/List Comprehension/task.md
ORG/Loops/Loop over a string/task.md
ORG/Loops/Nested List Comprehension/task.md
ORG/Loops/Nested for Loop/task.md
ORG/Loops/While loop/task.md
ORG/Modules and packages/Built-in modules/task.md
ORG/Modules and packages/Executing modules as scripts/task.md
ORG/Modules and packages/From import/task.md
ORG/Modules and packages/Import module/task.md
ORG/Modules and packages/Packages/task.md
ORG/README.md
ORG/Strings/Basic string methods/task.md
ORG/Strings/Character escaping/task.md
ORG/Strings/Concatenation/task.md
ORG/Strings/F-strings/task.md
ORG/Strings/In operator/task.md
ORG/Strings/String formatting/task.md
ORG/Strings/String indexing/task.md
ORG/Strings/String length/task.md
ORG/Strings/String multiplication/task.md
ORG/Strings/String negative indexing/task.md
ORG/Strings/String slicing/task.md
ORG/Variables/Arithmetic operators/task.md
ORG/Variables/Assignments/task.md
ORG/Variables/Boolean operators/task.md
ORG/Variables/Comparison operators/task.md
ORG/Variables/Type conversion/task.md
ORG/Variables/Undefined variable/task.md
ORG/Variables/Variable definition/task.md
ORG/Variables/Variable types/task.md

→フォルダ名に半角スペースが含まれているので注意。

-

(2). 行末の改行を削除するコマンドの例:
$ cd ~/ダウンロード/test2/
$ tr -d '\r' < ORG/task.md > a/task.md

→「a/task.md」からは行末コードが削除されています。

-

(3). コマンドの編集過程:
tr -d '\r' < ORG/'Classes and objects/Class and Instance Variables/task.md'
 > a/'Classes and objects/Class and Instance Variables/task.md'

↓ 置換をうまく使って修正

$ tr -d '\r' < ORG/'Classes and objects/Class and Instance Variables/task.md' > a/'Classes and objects/Class and Instance Variables/task.md'

-

(4). 使っているシェルの確認:
$ echo $SHELL
/bin/bash

-

-

4). 行末の改行を削除する、シェルスクリプトの作成:

$ cd ~/ダウンロード/test2/
$ featherpad Delete-LineEnd.sh

内容:

#!/bin/bash
cd ~/ダウンロード/test2/
tr -d '\r' < ORG/'Classes and objects/Class and Instance Variables/task.md' > a/'Classes and objects/Class and Instance Variables/task.md'
tr -d '\r' < ORG/'Classes and objects/Definition/task.md' > a/'Classes and objects/Definition/task.md'
tr -d '\r' < ORG/'Classes and objects/Special __init__ method/task.md' > a/'Classes and objects/Special __init__ method/task.md'
tr -d '\r' < ORG/'Classes and objects/The self parameter/task.md' > a/'Classes and objects/The self parameter/task.md'
tr -d '\r' < ORG/'Classes and objects/Update variable/task.md' > a/'Classes and objects/Update variable/task.md'
tr -d '\r' < ORG/'Classes and objects/Variable access/task.md' > a/'Classes and objects/Variable access/task.md'
tr -d '\r' < ORG/'Classes and objects/__str__ vs __repr__/task.md' > a/'Classes and objects/__str__ vs __repr__/task.md'
tr -d '\r' < ORG/'Condition expressions/Boolean operators order/task.md' > a/'Condition expressions/Boolean operators order/task.md'
tr -d '\r' < ORG/'Condition expressions/Boolean operators/task.md' > a/'Condition expressions/Boolean operators/task.md'
tr -d '\r' < ORG/'Condition expressions/Else and elif parts in if statement/task.md' > a/'Condition expressions/Else and elif parts in if statement/task.md'
tr -d '\r' < ORG/'Condition expressions/If statement/task.md' > a/'Condition expressions/If statement/task.md'
tr -d '\r' < ORG/'Data structures/Dictionaries/task.md' > a/'Data structures/Dictionaries/task.md'
tr -d '\r' < ORG/'Data structures/Dictionary keys() and values()/task.md' > a/'Data structures/Dictionary keys() and values()/task.md'
tr -d '\r' < ORG/'Data structures/In keyword/task.md' > a/'Data structures/In keyword/task.md'
tr -d '\r' < ORG/'Data structures/Join method/task.md' > a/'Data structures/Join method/task.md'
tr -d '\r' < ORG/'Data structures/List items/task.md' > a/'Data structures/List items/task.md'
tr -d '\r' < ORG/'Data structures/Lists introduction/task.md' > a/'Data structures/Lists introduction/task.md'
tr -d '\r' < ORG/'Data structures/Lists operations/task.md' > a/'Data structures/Lists operations/task.md'
tr -d '\r' < ORG/'Data structures/Nested Lists/task.md' > a/'Data structures/Nested Lists/task.md'
tr -d '\r' < ORG/'Data structures/Tuples/task.md' > a/'Data structures/Tuples/task.md'
tr -d '\r' < ORG/'File input output/Open file/task.md' > a/'File input output/Open file/task.md'
tr -d '\r' < ORG/'File input output/Read file/task.md' > a/'File input output/Read file/task.md'
tr -d '\r' < ORG/'File input output/What next/task.md' > a/'File input output/What next/task.md'
tr -d '\r' < ORG/'File input output/Write to file/task.md' > a/'File input output/Write to file/task.md'
tr -d '\r' < ORG/'Functions/Args and kwargs/task.md' > a/'Functions/Args and kwargs/task.md'
tr -d '\r' < ORG/'Functions/Default parameters/task.md' > a/'Functions/Default parameters/task.md'
tr -d '\r' < ORG/'Functions/Definition/task.md' > a/'Functions/Definition/task.md'
tr -d '\r' < ORG/'Functions/Keyword Arguments/task.md' > a/'Functions/Keyword Arguments/task.md'
tr -d '\r' < ORG/'Functions/Parameters and call arguments/task.md' > a/'Functions/Parameters and call arguments/task.md'
tr -d '\r' < ORG/'Functions/Recursion/task.md' > a/'Functions/Recursion/task.md'
tr -d '\r' < ORG/'Functions/Return value/task.md' > a/'Functions/Return value/task.md'
tr -d '\r' < ORG/'Introduction/About/task.md' > a/'Introduction/About/task.md'
tr -d '\r' < ORG/'Introduction/Comments/task.md' > a/'Introduction/Comments/task.md'
tr -d '\r' < ORG/'Introduction/Course View/task.md' > a/'Introduction/Course View/task.md'
tr -d '\r' < ORG/'Introduction/Editor/task.md' > a/'Introduction/Editor/task.md'
tr -d '\r' < ORG/'Introduction/Navigating Around/task.md' > a/'Introduction/Navigating Around/task.md'
tr -d '\r' < ORG/'Introduction/Our first program/task.md' > a/'Introduction/Our first program/task.md'
tr -d '\r' < ORG/'Introduction/Task Description/task.md' > a/'Introduction/Task Description/task.md'
tr -d '\r' < ORG/'Loops/Break keyword/task.md' > a/'Loops/Break keyword/task.md'
tr -d '\r' < ORG/'Loops/Continue keyword/task.md' > a/'Loops/Continue keyword/task.md'
tr -d '\r' < ORG/'Loops/Else with loops/task.md' > a/'Loops/Else with loops/task.md'
tr -d '\r' < ORG/'Loops/For loop/task.md' > a/'Loops/For loop/task.md'
tr -d '\r' < ORG/'Loops/List Comprehension/task.md' > a/'Loops/List Comprehension/task.md'
tr -d '\r' < ORG/'Loops/Loop over a string/task.md' > a/'Loops/Loop over a string/task.md'
tr -d '\r' < ORG/'Loops/Nested List Comprehension/task.md' > a/'Loops/Nested List Comprehension/task.md'
tr -d '\r' < ORG/'Loops/Nested for Loop/task.md' > a/'Loops/Nested for Loop/task.md'
tr -d '\r' < ORG/'Loops/While loop/task.md' > a/'Loops/While loop/task.md'
tr -d '\r' < ORG/'Modules and packages/Built-in modules/task.md' > a/'Modules and packages/Built-in modules/task.md'
tr -d '\r' < ORG/'Modules and packages/Executing modules as scripts/task.md' > a/'Modules and packages/Executing modules as scripts/task.md'
tr -d '\r' < ORG/'Modules and packages/From import/task.md' > a/'Modules and packages/From import/task.md'
tr -d '\r' < ORG/'Modules and packages/Import module/task.md' > a/'Modules and packages/Import module/task.md'
tr -d '\r' < ORG/'Modules and packages/Packages/task.md' > a/'Modules and packages/Packages/task.md'
tr -d '\r' < ORG/'README.md' > a/'README.md'
tr -d '\r' < ORG/'Strings/Basic string methods/task.md' > a/'Strings/Basic string methods/task.md'
tr -d '\r' < ORG/'Strings/Character escaping/task.md' > a/'Strings/Character escaping/task.md'
tr -d '\r' < ORG/'Strings/Concatenation/task.md' > a/'Strings/Concatenation/task.md'
tr -d '\r' < ORG/'Strings/F-strings/task.md' > a/'Strings/F-strings/task.md'
tr -d '\r' < ORG/'Strings/In operator/task.md' > a/'Strings/In operator/task.md'
tr -d '\r' < ORG/'Strings/String formatting/task.md' > a/'Strings/String formatting/task.md'
tr -d '\r' < ORG/'Strings/String indexing/task.md' > a/'Strings/String indexing/task.md'
tr -d '\r' < ORG/'Strings/String length/task.md' > a/'Strings/String length/task.md'
tr -d '\r' < ORG/'Strings/String multiplication/task.md' > a/'Strings/String multiplication/task.md'
tr -d '\r' < ORG/'Strings/String negative indexing/task.md' > a/'Strings/String negative indexing/task.md'
tr -d '\r' < ORG/'Strings/String slicing/task.md' > a/'Strings/String slicing/task.md'
tr -d '\r' < ORG/'Variables/Arithmetic operators/task.md' > a/'Variables/Arithmetic operators/task.md'
tr -d '\r' < ORG/'Variables/Assignments/task.md' > a/'Variables/Assignments/task.md'
tr -d '\r' < ORG/'Variables/Boolean operators/task.md' > a/'Variables/Boolean operators/task.md'
tr -d '\r' < ORG/'Variables/Comparison operators/task.md' > a/'Variables/Comparison operators/task.md'
tr -d '\r' < ORG/'Variables/Type conversion/task.md' > a/'Variables/Type conversion/task.md'
tr -d '\r' < ORG/'Variables/Undefined variable/task.md' > a/'Variables/Undefined variable/task.md'
tr -d '\r' < ORG/'Variables/Variable definition/task.md' > a/'Variables/Variable definition/task.md'
tr -d '\r' < ORG/'Variables/Variable types/task.md' > a/'Variables/Variable types/task.md'

→「cd ~/ダウンロード/test2/」の部分は、適用時の環境に合わせての修正が必要です。

-

5). シェルスクリプトの実行:

$ cd ~/ダウンロード/test2/
$ bash Delete-LineEnd.sh

→これだと実行権限をファイルに与える作業($ chmod +x ./Delete-LineEnd.sh)は要りません。

これで「~/ダウンロード/test2/a/*.md」ファイルの行末のコードが削除されます。

-

6). 行末のコードが削除されたフォルダをコピー:

$ cp -r ~/ダウンロード/test2/a/* ~/ダウンロード/test2/b

→「a」フォルダを保持しておけば、後々の作業を省けます。「b」フォルダのみで作業します。

確認:

$ ls -l ~/ダウンロード/test2/ORG/'Classes and objects/Class and Instance Variables/task.md'
-rw-rw-r-- 1 ubn ubn 1613  4月  9 07:25 '/home/ubn/ダウンロード/test2/ORG/Classes and objects/Class and Instance Variables/task.md'

$ ls -l ~/ダウンロード/test2/b/'Classes and objects/Class and Instance Variables/task.md'
-rw-rw-r-- 1 ubn ubn 1570  4月  9 07:33 '/home/ubn/ダウンロード/test2/b/Classes and objects/Class and Instance Variables/task.md'

→行末のコードが削除され、サイズが小さくなりました。つまり、何かしらの行末のコードが存在していたということ。

-

7). パッチファイルの作成(動作確認用):

$ cd ~/ダウンロード/test2/b/
$ featherpad pycharm-ja.patch

貼り付ける内容は、「項番 B-2」と同じです。更に改修されています。

  • パッチファイルを置くフォルダは違うので注意。

-

\ ファイル末尾に改行がありません」

の文字列がパッチの修正前のお尻に記録されていました:

-

それに伴う、パッチファイルの修正:

上記の対策として、パッチの差分行の表示(例えば、@@ -1,37 +1,55 @@)の、後ろの数字を「1」増やして(@@ -1,37 +1,56 @@)、翻訳した差分の最後に改行「+」の1行を追加しました:

459 行目:
"b/Classes and objects/__str__ vs __repr__/task.md"
@@ -1,37 +1,56 @@

894 行目:
"b/Data structures/Join method/task.md"
@@ -1,42 +1,44 @@

1145 行目:
"b/Data structures/Nested Lists/task.md"
@@ -1,36 +1,41 @@

1944 行目:
"b/Functions/Keyword Arguments/task.md"
@@ -1,38 +1,48 @@

2504 行目:
b/Introduction/Editor/task.md
@@ -1,22 +1,24 @@

2555 行目:
"b/Introduction/Navigating Around/task.md"
@@ -1,18 +1,21 @@

2654 行目:
"b/Introduction/Task Description/task.md"
@@ -1,41 +1,46 @@

2800 行目:
"b/Loops/Else with loops/task.md"
@@ -1,40 +1,42 @@

2921 行目:
"b/Loops/List Comprehension/task.md"
@@ -1,41 +1,52 @@

3142 行目:
"b/Loops/Nested for Loop/task.md"
@@ -1,48 +1,54 @@

3335 行目:
"b/Modules and packages/Executing modules as scripts/task.md"
@@ -1,66 +1,66 @@

→今回は問題ありませんが、次回のパッチの作成時にエラーしないように、 エラーメッセージの登録がないファイルでも「空行」を追加しました。

-

パッチファイルが完成

→パッチの行数は 4599 行になりました。

-

8). パッチの適用(テスト確認用):

$ cd ~/ダウンロード/test2/b/
$ patch -p1 < pycharm-ja.patch

→正常に完了すれば、「項番 A-2.の 1).」と同じメッセージが表示 されます。

-

もし必要なら、ここで再度、「a」と「b」を使って差分を作成し、パッチファイルを作成することもできますが、今回は行いません。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ---

C-2. 参考: (test2): テスト確認に続いて、そのまま翻訳を本番のフォルダに反映させる場合:

-

閲覧のみで、作業は要りません。

-

翻訳されたフォルダを反映(コピー):

$ rm -r ~/PycharmProjects/'Introduction to Python'/*
$ cp -r ~/ダウンロード/test2/b/* ~/PycharmProjects/'Introduction to Python'/

-

キャッシュの絡みがあるので、一度システムを再起動します。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----

C-3. 参考: (test2): テスト環境がない状態で、エラー回避しながら、日本語化のパッチファイルを反映させる手順:

-

閲覧のみで、作業は要りません。

-

1). 行末の改行を削除する、シェルスクリプト「Delete-LineEnd.sh」の作成:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ featherpad Delete-LineEnd.sh

内容:

#!/bin/bash
cd ~/PycharmProjects/'Introduction to Python'/
tr -d '\r' < ORG/'Classes and objects/Class and Instance Variables/task.md' > a/'Classes and objects/Class and Instance Variables/task.md'
tr -d '\r' < ORG/'Classes and objects/Definition/task.md' > a/'Classes and objects/Definition/task.md'
tr -d '\r' < ORG/'Classes and objects/Special __init__ method/task.md' > a/'Classes and objects/Special __init__ method/task.md'
tr -d '\r' < ORG/'Classes and objects/The self parameter/task.md' > a/'Classes and objects/The self parameter/task.md'
tr -d '\r' < ORG/'Classes and objects/Update variable/task.md' > a/'Classes and objects/Update variable/task.md'
tr -d '\r' < ORG/'Classes and objects/Variable access/task.md' > a/'Classes and objects/Variable access/task.md'
tr -d '\r' < ORG/'Classes and objects/__str__ vs __repr__/task.md' > a/'Classes and objects/__str__ vs __repr__/task.md'
tr -d '\r' < ORG/'Condition expressions/Boolean operators order/task.md' > a/'Condition expressions/Boolean operators order/task.md'
tr -d '\r' < ORG/'Condition expressions/Boolean operators/task.md' > a/'Condition expressions/Boolean operators/task.md'
tr -d '\r' < ORG/'Condition expressions/Else and elif parts in if statement/task.md' > a/'Condition expressions/Else and elif parts in if statement/task.md'
tr -d '\r' < ORG/'Condition expressions/If statement/task.md' > a/'Condition expressions/If statement/task.md'
tr -d '\r' < ORG/'Data structures/Dictionaries/task.md' > a/'Data structures/Dictionaries/task.md'
tr -d '\r' < ORG/'Data structures/Dictionary keys() and values()/task.md' > a/'Data structures/Dictionary keys() and values()/task.md'
tr -d '\r' < ORG/'Data structures/In keyword/task.md' > a/'Data structures/In keyword/task.md'
tr -d '\r' < ORG/'Data structures/Join method/task.md' > a/'Data structures/Join method/task.md'
tr -d '\r' < ORG/'Data structures/List items/task.md' > a/'Data structures/List items/task.md'
tr -d '\r' < ORG/'Data structures/Lists introduction/task.md' > a/'Data structures/Lists introduction/task.md'
tr -d '\r' < ORG/'Data structures/Lists operations/task.md' > a/'Data structures/Lists operations/task.md'
tr -d '\r' < ORG/'Data structures/Nested Lists/task.md' > a/'Data structures/Nested Lists/task.md'
tr -d '\r' < ORG/'Data structures/Tuples/task.md' > a/'Data structures/Tuples/task.md'
tr -d '\r' < ORG/'File input output/Open file/task.md' > a/'File input output/Open file/task.md'
tr -d '\r' < ORG/'File input output/Read file/task.md' > a/'File input output/Read file/task.md'
tr -d '\r' < ORG/'File input output/What next/task.md' > a/'File input output/What next/task.md'
tr -d '\r' < ORG/'File input output/Write to file/task.md' > a/'File input output/Write to file/task.md'
tr -d '\r' < ORG/'Functions/Args and kwargs/task.md' > a/'Functions/Args and kwargs/task.md'
tr -d '\r' < ORG/'Functions/Default parameters/task.md' > a/'Functions/Default parameters/task.md'
tr -d '\r' < ORG/'Functions/Definition/task.md' > a/'Functions/Definition/task.md'
tr -d '\r' < ORG/'Functions/Keyword Arguments/task.md' > a/'Functions/Keyword Arguments/task.md'
tr -d '\r' < ORG/'Functions/Parameters and call arguments/task.md' > a/'Functions/Parameters and call arguments/task.md'
tr -d '\r' < ORG/'Functions/Recursion/task.md' > a/'Functions/Recursion/task.md'
tr -d '\r' < ORG/'Functions/Return value/task.md' > a/'Functions/Return value/task.md'
tr -d '\r' < ORG/'Introduction/About/task.md' > a/'Introduction/About/task.md'
tr -d '\r' < ORG/'Introduction/Comments/task.md' > a/'Introduction/Comments/task.md'
tr -d '\r' < ORG/'Introduction/Course View/task.md' > a/'Introduction/Course View/task.md'
tr -d '\r' < ORG/'Introduction/Editor/task.md' > a/'Introduction/Editor/task.md'
tr -d '\r' < ORG/'Introduction/Navigating Around/task.md' > a/'Introduction/Navigating Around/task.md'
tr -d '\r' < ORG/'Introduction/Our first program/task.md' > a/'Introduction/Our first program/task.md'
tr -d '\r' < ORG/'Introduction/Task Description/task.md' > a/'Introduction/Task Description/task.md'
tr -d '\r' < ORG/'Loops/Break keyword/task.md' > a/'Loops/Break keyword/task.md'
tr -d '\r' < ORG/'Loops/Continue keyword/task.md' > a/'Loops/Continue keyword/task.md'
tr -d '\r' < ORG/'Loops/Else with loops/task.md' > a/'Loops/Else with loops/task.md'
tr -d '\r' < ORG/'Loops/For loop/task.md' > a/'Loops/For loop/task.md'
tr -d '\r' < ORG/'Loops/List Comprehension/task.md' > a/'Loops/List Comprehension/task.md'
tr -d '\r' < ORG/'Loops/Loop over a string/task.md' > a/'Loops/Loop over a string/task.md'
tr -d '\r' < ORG/'Loops/Nested List Comprehension/task.md' > a/'Loops/Nested List Comprehension/task.md'
tr -d '\r' < ORG/'Loops/Nested for Loop/task.md' > a/'Loops/Nested for Loop/task.md'
tr -d '\r' < ORG/'Loops/While loop/task.md' > a/'Loops/While loop/task.md'
tr -d '\r' < ORG/'Modules and packages/Built-in modules/task.md' > a/'Modules and packages/Built-in modules/task.md'
tr -d '\r' < ORG/'Modules and packages/Executing modules as scripts/task.md' > a/'Modules and packages/Executing modules as scripts/task.md'
tr -d '\r' < ORG/'Modules and packages/From import/task.md' > a/'Modules and packages/From import/task.md'
tr -d '\r' < ORG/'Modules and packages/Import module/task.md' > a/'Modules and packages/Import module/task.md'
tr -d '\r' < ORG/'Modules and packages/Packages/task.md' > a/'Modules and packages/Packages/task.md'
tr -d '\r' < ORG/'README.md' > a/'README.md'
tr -d '\r' < ORG/'Strings/Basic string methods/task.md' > a/'Strings/Basic string methods/task.md'
tr -d '\r' < ORG/'Strings/Character escaping/task.md' > a/'Strings/Character escaping/task.md'
tr -d '\r' < ORG/'Strings/Concatenation/task.md' > a/'Strings/Concatenation/task.md'
tr -d '\r' < ORG/'Strings/F-strings/task.md' > a/'Strings/F-strings/task.md'
tr -d '\r' < ORG/'Strings/In operator/task.md' > a/'Strings/In operator/task.md'
tr -d '\r' < ORG/'Strings/String formatting/task.md' > a/'Strings/String formatting/task.md'
tr -d '\r' < ORG/'Strings/String indexing/task.md' > a/'Strings/String indexing/task.md'
tr -d '\r' < ORG/'Strings/String length/task.md' > a/'Strings/String length/task.md'
tr -d '\r' < ORG/'Strings/String multiplication/task.md' > a/'Strings/String multiplication/task.md'
tr -d '\r' < ORG/'Strings/String negative indexing/task.md' > a/'Strings/String negative indexing/task.md'
tr -d '\r' < ORG/'Strings/String slicing/task.md' > a/'Strings/String slicing/task.md'
tr -d '\r' < ORG/'Variables/Arithmetic operators/task.md' > a/'Variables/Arithmetic operators/task.md'
tr -d '\r' < ORG/'Variables/Assignments/task.md' > a/'Variables/Assignments/task.md'
tr -d '\r' < ORG/'Variables/Boolean operators/task.md' > a/'Variables/Boolean operators/task.md'
tr -d '\r' < ORG/'Variables/Comparison operators/task.md' > a/'Variables/Comparison operators/task.md'
tr -d '\r' < ORG/'Variables/Type conversion/task.md' > a/'Variables/Type conversion/task.md'
tr -d '\r' < ORG/'Variables/Undefined variable/task.md' > a/'Variables/Undefined variable/task.md'
tr -d '\r' < ORG/'Variables/Variable definition/task.md' > a/'Variables/Variable definition/task.md'
tr -d '\r' < ORG/'Variables/Variable types/task.md' > a/'Variables/Variable types/task.md'

-

2). シェルスクリプトの実行:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ chmod +x ./Delete-LineEnd.sh
$ ./Delete-LineEnd.sh

→これで「md」ファイルの行末のコードが削除されました。

-

3). パッチファイルを作成:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ featherpad pycharm-ja.patch

↓ 連続して、すべて貼り付けてください(長いので、マウスで先頭を選んでから、Sift+下矢印「↓」を使うと楽です)

diff -Naur "a/Classes and objects/Class and Instance Variables/task.md" "b/Classes and objects/Class and Instance Variables/task.md"
--- "a/Classes and objects/Class and Instance Variables/task.md"    2022-04-06 14:37:38.779007644 +0900
+++ "b/Classes and objects/Class and Instance Variables/task.md"    2022-04-06 14:38:43.187947948 +0900
@@ -1,43 +1,53 @@
-## Class and Instance Variables
-
-In general, instance variables are for data unique to each instance, 
-and class variables are for attributes and methods shared by all instances of the class:
-
-```python
-class Cat:
-
-    species = "Felis catus"  
-    
-    def __init__(self, breed, name):
-        self.breed = breed  
-        self.name = name
-
-cleo = Cat('mix', 'Cleo')
-furry = Cat('bengal', 'Furry')
-
-print(cleo.name)
-print(cleo.species)
-print(furry.name)
-print(furry.species)
-```
-
-```text
-Cleo
-Felis catus
-Furry
-Felis catus
-```
-You can see that `species` is a class variable shared by all instances, while
-`name` and `breed` are instance variable unique to each instance.
-
-Shared data can have possibly surprising effects when involving mutable objects, 
-such as lists and dictionaries. If a class variable is a list and you modify it for
-one object, it will be changed for all objects of the class (check out the example in the code
-editor – see what `print(barsik.favorite_food)` will print). If you intend using a list to keep track 
-of features unique to each instance, you need to make it an instance attribute.
-
-In the code editor, complete the implementation of the `Animals` class so that the `print` statement 
-below prints a line like this: `"This is Doggy the dog, one of my pets."` for each of the pets.
-
-<div class="hint">The class variable should contain information shared between all instances (it's one of the <code>"pets"</code>).</div>
-<div class="hint">Instance variables should contain information unique for the instances (name is unique).</div>
+## クラス変数とインスタンス変数 :(Class and Instance Variables)
+
+一般に、「インスタンス変数」は各インスタンスに固有のデータ用であり、  
+「クラス変数」はクラスのすべてのインスタンスによって共有される属性とメソッド用です:
+
+```python
+class Cat:
+
+    species = "Felis catus"  
+    
+    def __init__(self, breed, name):
+        self.breed = breed  
+        self.name = name
+
+cleo = Cat('mix', 'Cleo')
+furry = Cat('bengal', 'Furry')
+
+print(cleo.name)
+print(cleo.species)
+print(furry.name)
+print(furry.species)
+```
+
+```text
+Cleo
+Felis catus
+Furry
+Felis catus
+```
+`species`(種族)はすべてのインスタンスで共有されるクラス変数であり、    
+`name`(名前)と `breed`(品種)は各インスタンスに固有のインスタンス変数であることがわかります。
+
+共有データは、リストや辞書などの可変オブジェクトを含む場合、驚くべき効果をもたらす可能性があります。
+
+
+クラス変数がリストであり、1つのオブジェクトに対して変更すると、  
+クラスのすべてのオブジェクトに対して変更されます
+
+コードエディタの例を確認してください。
+
+`print(barsik.favorite_food)` が出力する内容を確認してください。
+
+リストを使用して各インスタンスに固有の機能を追跡する場合は、  
+リストをインスタンス属性にする必要があります。
+
+コードエディタで、`Animals` クラスの実装を完了して、以下の `print` ステートメントが次のような行を出力するようにします:
+
+各ペットに `"This is Doggy the dog, one of my pets."`   
+(これは私のペットの1匹である犬の犬です。)
+
+<div class='hint'>クラス変数には、すべてのインスタンス間で共有される情報が含まれている必要があります。(<code>"pets"</code> の1つです)</div>
+
+<div class='hint'>インスタンス変数には、インスタンスに固有の情報が含まれている必要があります。(名前は一意です)</div>
diff -Naur "a/Classes and objects/Definition/task.md" "b/Classes and objects/Definition/task.md"
--- "a/Classes and objects/Definition/task.md"  2022-04-06 14:37:38.731006942 +0900
+++ "b/Classes and objects/Definition/task.md"  2022-04-06 14:38:43.135947191 +0900
@@ -1,53 +1,54 @@
-## Definition
-
-Classes provide a means of bundling data and functionality together. Creating a new 
-class creates a new type of object, allowing new instances of that type to be made.
-Classes are essentially templates for creating your objects.
-Each class instance (object) can have attributes attached to it for maintaining its state.
-Functions of objects are called methods, and they can modify their state. Methods are 
-defined by the object's class.
-
-The generalized form of class definition looks like this:
-
-```
-class ClassName:
-    <statement-1>
-    .
-    .
-    .
-    <statement-N>
-```
-Class definitions, like function definitions (`def` statements) must be executed before 
-they have any effect.
-
-The statements inside a class definition will usually be function definitions, 
-but other statements are sometimes useful. The function definitions inside a 
-class normally have a peculiar form of argument list — this is explained later.
-
-Class objects support two kinds of operations: attribute references and instantiation.
-Attribute references will be discussed in the following sections. Class instantiation uses 
-function notation. Just imagine that the class object is a parameterless function that 
-returns a new instance of the class. For example:
-
-```python
-class SomeClass:
-    """A simple example class"""
-    i = 12345
-
-x = SomeClass()
-```
-
-`x = SomeClass()` creates a new instance of the class and assigns this object to the local 
-variable `x`.
-
-You can find out more about class definition syntax by reading <a href="https://docs.python.org/3/tutorial/classes.html#class-definition-syntax">this section</a>
-of Python Documentation.
-
-Assign a value to  `variable` inside `MyClass` and create an object `my_class` of the class `MyClass()`. 
-Run the code and see what happens!
-
-<div class='hint'>Assign any value to <code>variable</code>.</div>
-
-<div class='hint'>Look at the example in the text to figure out how to instantiate an object.</div>
-
-
+## 意味 :(Definition)
+
+クラスは、データと機能をバンドルする手段を提供します。
+
+新しいクラスを作成すると、新しいタイプのオブジェクトが作成され、そのタイプの新しいインスタンスを作成できるようになります。
+
+クラスは基本的に、オブジェクトを作成するためのテンプレートです。  
+各クラスインスタンス(オブジェクト)には、その状態を維持するための属性を付加できます。  
+オブジェクトの関数はメソッドと呼ばれ、その状態を変更できます。  
+メソッドは、オブジェクトのクラスによって定義されます。
+
+クラス定義の一般化された形式は次のようになります:
+
+```
+class ClassName:
+    <statement-1>
+    .
+    .
+    .
+    <statement-N>
+```
+
+関数定義( `def` ステートメント)のようなクラス定義は、効果を発揮する前に実行する必要があります。
+
+クラス定義内のステートメントは通常関数定義ですが、他のステートメントが役立つ場合もあります。
+クラス内の関数定義には通常、独特の形式の引数リストがあります。これについては後で説明します。
+
+クラスオブジェクトは、属性参照とインスタンス化の2種類の操作をサポートします。
+
+属性参照については、次のセクションで説明します。
+
+クラスのインスタンス化は関数表記を使用します。
+クラスオブジェクトが、クラスの新しいインスタンスを返すパラメータのない関数であると想像してみてください。
+
+例えば:
+
+```python
+class SomeClass:
+    """A simple example class"""
+    i = 12345
+
+x = SomeClass()
+```
+`x = SomeClass()` は、クラスの新しいインスタンスを作成し、このオブジェクトをローカル変数 `x` に割り当てます。
+
+クラス定義構文の詳細については、Python ドキュメントの <a href="https://docs.python.org/3/tutorial/classes.html#class-definition-syntax">このセクション</a> をご覧ください。
+
+`MyClass` 内の `variable` に値を割り当て、クラス `MyClass()` のオブジェクト `my_class` を作成します。
+
+コードを実行して、何が起こるかを確認してください。
+
+<div class='hint'>任意の値を <code>variable</code> に割り当てます。</div>
+
+<div class='hint'>テキストの例を見て、オブジェクトをインスタンス化する方法を理解してください。</div>
diff -Naur "a/Classes and objects/Special __init__ method/task.md" "b/Classes and objects/Special __init__ method/task.md"
--- "a/Classes and objects/Special __init__ method/task.md" 2022-04-06 14:37:38.771007527 +0900
+++ "b/Classes and objects/Special __init__ method/task.md" 2022-04-06 14:38:43.175947774 +0900
@@ -1,43 +1,49 @@
-## Special &#95;&#95;init&#95;&#95; method
-
-The instantiation operation (“calling” a class object) creates an empty object, 
-but it is useful to create objects with instances customized to a specific 
-initial state. Therefore, a class may define a special method named `__init__()`, 
-like this:
-
-```python
-class MyClass:
-    def __init__(self):
-        self.data = []
-```
-`__init__` is one of the reserved methods in Python. If defined, the `__init__()` 
-method is invoked automatically when an instance of the class is created,
-and it initializes the object and its attributes. It always takes at least
-one argument, `self`. So in our example, 
-a new, initialized instance can be obtained by:
-
-```python
-x = MyClass()
-```
-The `__init__()` method may receive arguments for greater flexibility. 
-In that case, arguments given to the class instantiation operator are passed 
-on to `__init__()`. For example:
-```python
-class Complex:
-    def __init__(self, real_part, imag_part):
-        self.r = real_part
-        self.i = imag_part
-        self.num = complex(self.r, self.i)
-
-x = Complex(3.0, -4.5)  # Instantiating a complex number
-x.num
-```
-```text
-(3-4.5j)
-```
-
-
-In the code editor, add parameters to the`__init__()` method of the `Car` class, so we can 
-create it with a specified color and brand.  
-
-<div class='hint'>Add two parameters &mdash; <code>self</code> and <code>color</code>.</div>
+## 特別な__init__メソッド :(Special &#95;&#95;init&#95;&#95; method)
+
+インスタンス化操作(クラスオブジェクトの「呼び出し」)は空のオブジェクトを作成しますが、特定の初期状態にカスタマイズされたインスタンスを使用してオブジェクトを作成すると便利です。
+
+従って、クラスは `__init__()` という名前の特別なメソッドを定義する場合があります。
+
+このような: 
+
+
+```python
+class MyClass:
+    def __init__(self):
+        self.data = []
+```
+`__init__` はPython で予約されているメソッドの1つです。
+
+定義されている場合、 `__init__()` メソッドは、クラスのインスタンスが作成されるときに自動的に呼び出され、オブジェクトとその属性を初期化します。
+
+それは常に少なくとも 1つの引数 `self` を取ります。
+
+従って、この例では、初期化された新しいインスタンスは次の方法で取得できます:
+
+```python
+x = MyClass()
+```
+
+ `__init__()` メソッドは、柔軟性を高めるために引数を受け取る場合があります。
+その場合、クラスインスタンス化演算子に与えられた引数は `__init__()` に渡されます。
+
+例えば:
+
+```python
+class Complex:
+    def __init__(self, real_part, imag_part):
+        self.r = real_part
+        self.i = imag_part
+        self.num = complex(self.r, self.i)
+
+x = Complex(3.0, -4.5)  # Instantiating a complex number
+x.num
+```
+```text
+(3-4.5j)
+```
+
+コードエディタで、`Car` クラスの `__init__()` メソッドにパラメータを追加します。
+指定された色とブランドで作成します。
+
+<div class='hint'> <code>self</code> と <code>color</code> の 2つのパラメータを追加します。</div>
diff -Naur "a/Classes and objects/The self parameter/task.md" "b/Classes and objects/The self parameter/task.md"
--- "a/Classes and objects/The self parameter/task.md"  2022-04-06 14:37:38.763007410 +0900
+++ "b/Classes and objects/The self parameter/task.md"  2022-04-06 14:38:43.171947715 +0900
@@ -1,30 +1,35 @@
-## The self parameter
-
-It's time to explain the `self` parameter we saw in previous tasks.
-The first argument passed to a class method is `self`. This is nothing more 
-than a convention: the name `self` has no special meaning to Python. 
-It is advised to follow the convention, otherwise your code may be less readable 
-to other Python programmers.
-
-Python will use the `self` parameter to refer to the object that is created or modified.  
-Methods may call other methods by using method attributes of the `self` argument:
-
-```python
-class Bag:
-    def __init__(self):
-        self.data = []
-
-    def add(self, x):
-        self.data.append(x)
-
-    def addtwice(self, x):
-        self.add(x)  # Calling the method `add` from another method
-        self.add(x)
-```
-  
-In the code editor, implement the `add` method of the `Calculator` class. It should 
-add `amount` to the field `current`.  In addition, complete the method `get_current`.
-Run the code to see how it works.
-
-<div class='hint'>Add <code>amount</code> to the <code>self.current</code> variable.</div>
-<div class="hint">Use the <code>+=</code> sign.</div>
+## 自己パラメータ :(The self parameter)
+
+前の課題で見た `self` パラメータを説明する時が来ました。
+
+クラスメソッドに渡される最初の引数は `self` です。これは単なる慣例にすぎません。
+`self` という名前はPython にとって特別な意味はありません。
+
+規則に従うことをお勧めします。そうしないと、他のPython プログラマーがコードを読みにくくなる可能性があります。
+
+Python は `self` パラメータを使用して、作成または変更されたオブジェクトを参照します。
+
+メソッドは、`self` 引数のメソッド属性を使用して他のメソッドを呼び出すことができます:
+
+```python
+class Bag:
+    def __init__(self):
+        self.data = []
+
+    def add(self, x):
+        self.data.append(x)
+
+    def addtwice(self, x):
+        self.add(x)  # Calling the method `add` from another method
+        self.add(x)
+```
+
+コードエディタで、`Calculator` クラスの `add` メソッドを実装します。
+フィールド `current` に `amount` を追加する必要があります。
+
+さらに、メソッド `get_current` を完了します。
+
+コードを実行して、どのように機能するかを確認します。
+
+<div class='hint'> <code>amount</code> を <code>self.current</code> 変数に追加します。</div>
+<div class='hint'> <code>+=</code> 記号を使用します。</div>
diff -Naur "a/Classes and objects/Update variable/task.md" "b/Classes and objects/Update variable/task.md"
--- "a/Classes and objects/Update variable/task.md" 2022-04-06 14:37:38.747007176 +0900
+++ "b/Classes and objects/Update variable/task.md" 2022-04-06 14:38:43.159947540 +0900
@@ -1,12 +1,11 @@
-## Update variable 
-
-In this exercise, create a new `Car` object `car2` and then set `color` 
-of `car2` to `"red"`. Print the descriptions of `car1` and `car2` by calling the 
-`description` method.
-
-<div class='hint'>Remember how we instantiated objects in the previous task by 
-"calling" the class.</div>
-<div class='hint'>Change the color using value assignment (<code>=</code>) and 
-attribute reference syntax <code>obj.attribute</code>.</div>
-<div class='hint'>In the print statements, call the <code>description()</code> method
-like you did in the previous task.</div>
+## 変数を更新 :(Update variable)
+
+この演習では、新しい `Car` オブジェクト `car2` を作成してから、`car2` の `color` を `"red"` に設定します。
+
+`description` メソッドを呼び出して、`car1` と `car2` の説明を出力します。
+
+<div class='hint'>クラスを「呼び出す」ことにより、前の課題でオブジェクトをインスタンス化した方法を思い出してください。</div>
+
+<div class='hint'>値の割り当て (<code>=</code>) と属性参照構文 <code>obj.attribute</code>を使用して色を変更します。</div>.
+
+<div class='hint'> printステートメントで、前の課題で行ったように <code>description()</code> メソッドを呼び出します。</div>
diff -Naur "a/Classes and objects/Variable access/task.md" "b/Classes and objects/Variable access/task.md"
--- "a/Classes and objects/Variable access/task.md" 2022-04-06 14:37:38.739007059 +0900
+++ "b/Classes and objects/Variable access/task.md" 2022-04-06 14:38:43.147947366 +0900
@@ -1,24 +1,27 @@
-## Variable access
-
-You can use attribute references to access variables inside an object.
-Attribute references use the standard syntax for all attribute references 
-in Python: `obj.name`. Valid attribute names are all the names that were in 
-the class’s namespace when the class object was created. So, if the class 
-definition looked like this:
-
-```python
-class MyClass:
-    year = 2021
-
-    def say_hello(self):
-        return 'hello world'
-```
-then `MyClass.year` and `MyClass.say_hello` are valid attribute references returning an 
-integer and a function object, respectively. Class attributes can be 
-assigned to, so you can change the value of `MyClass.year` by assignment.
-
-  
-Check out our example and print the value of `variable1` from `my_object`.  
-Call the `foo` method of the object `my_object`, print the result.
-
-<div class='hint'>Access <code>variable1</code> using the <code>object.name</code> syntax.</div>
+## 可変アクセス :(Variable access)
+
+「属性参照」を使用して、オブジェクト内の変数にアクセスできます。
+
+「属性参照」は、Python のすべての属性参照に標準の構文 `obj.name` を使用します。
+
+有効な属性名は、クラスオブジェクトが作成されたときにクラスの名前空間にあったすべての名前です。
+
+従って、クラス定義が次のようになっている場合:
+
+```python
+class MyClass:
+    year = 2021
+
+    def say_hello(self):
+        return 'hello world'
+```
+
+`MyClass.year` と `MyClass.say_hello` は、それぞれ整数と関数オブジェクトを返す有効な「属性参照」です。
+
+クラス属性を割り当てることができるため、割り当てによって `MyClass.year` の値を変更できます。
+
+例を確認して、`my_object` から `variable1` の値を出力してください。
+
+オブジェクト `my_object` の `foo` メソッドを呼び出し、結果を出力します。
+
+<div class='hint'> <code>object.name</code> 構文を使用して<code>variable1</code> にアクセスします。</div>
diff -Naur "a/Classes and objects/__str__ vs __repr__/task.md" "b/Classes and objects/__str__ vs __repr__/task.md"
--- "a/Classes and objects/__str__ vs __repr__/task.md" 2022-04-06 14:37:38.771007527 +0900
+++ "b/Classes and objects/__str__ vs __repr__/task.md" 2022-04-06 14:38:43.179947832 +0900
@@ -1,37 +1,56 @@
-## \_\_str__ vs \_\_repr__ methods
-
-Both `str()` and `repr()` methods in Python are used for string representation of an object,
-but there are some differences.
-For example:
-```python
-s = 'Hello World'
-print (str(s))
-print(repr(s))
-```
-```text
-Hello World
-'Hello World'
-```
-You can see that if we print a string using the `repr()` function, then it prints 
-with a pair of quotes. `str()` is used for creating output for the user, while `repr()` 
-is normally used for debugging and development. `repr()` needs to be unambiguous, 
-and `str()` &mdash; to be readable.
-
-Much like `__init__`, the methods `__repr__` and `__str__` are reserved in Python. 
-The `print()` statement and the `str()` built-in function use the `__str__` method defined in the object's class
-to display its string representation. The `repr()` built-in function uses the `__repr__` method 
-defined in the object's class. 
-
-Our own defined class should therefore have a `__repr__` if we need detailed information for debugging. 
-Also, if we think it would be useful to have a string representation for users, we should create 
-a `__str__` function. Check out another implementation of the class `Complex` in the code editor. Run the code
-to see what each of the two `print` statements prints.
-
-Implement `__str__` and `__repr__` methods for the class `Cat`. `__str__` method should return a string like this:
-`"My siamese cat's name is Lucy"`;  `__repr__` method should return a string like this:
-`"Cat, breed: siamese, name: Lucy"`. Use [f-strings](course://Strings/F-strings).
-
-
-
-<div class="hint">Do not forget to use <code>self.attribute</code> syntax.</div>
-<div class="hint"> Do not forget about character escaping to print the apostrophe.</div>
\ ファイル末尾に改行がありません
+## \_\_str__ と \_\_repr__ メソッド :(\_\_str__ vs \_\_repr__ methods)
+
+Python の `str()` メソッドと `repr()` メソッドは、どちらもオブジェクトの文字列表現に使用されますが、いくつかの違いがあります。
+
+例えば:
+
+```python
+s = 'Hello World'
+print (str(s))
+print(repr(s))
+```
+```text
+Hello World
+'Hello World'
+```
+
+`repr()` 関数を使用して文字列を出力すると、引用符のペアで出力されます。
+
+`str()` はユーザーの出力を作成するときに使用され、
+`repr()` は通常デバッグと開発に使用されます。
+
+ `repr()` は明確に、`str()` が読み取り可能である必要があります。
+
+`__init__` と同様に、メソッド `__repr__` と `__str__` は Python で予約されています。
+
+`print()` ステートメントと `str()` 組み込み関数は、オブジェクトのクラスで定義された `__str__` メソッドを使用して、その文字列表現を表示します。
+
+`repr()` 組み込み関数は、オブジェクトのクラスで定義された `__repr__` メソッドを使用します。
+
+従って、デバッグ用の詳細情報が必要な場合は、独自に定義したクラスに `__repr__` が必要です。
+
+また、ユーザーに文字列表現を使用すると便利だと思われる場合は、`__str__` 関数を作成する必要があります。
+
+
+コードエディタでクラス `Complex` の別の実装を確認してください。
+
+コードを実行して、2つの `print` ステートメントのそれぞれが何を出力するかを確認します。
+
+クラス `Cat` に `__str__` メソッドと `__repr__` メソッドを実装します。
+
+`__str__` メソッドは次のような文字列を返す必要があります:
+
+`"My siamese cat's name is Lucy"`
+(`"私のシャム猫の名前はルーシーです"`)
+
+`__repr__` メソッドは次のような文字列を返す必要があります: 
+
+`"Cat, breed: siamese, name: Lucy"`
+(`"猫, 品種: シャム, 名前: ルーシー"`)
+
+[f-strings](course://Strings/F-strings) を使用します。
+
+<div class='hint'> <code>self.attribute</code> 構文を使用することを忘れないでください。</div>
+
+<div class='hint'> アポストロフィを出力するために文字がエスケープされることを忘れないでください。</div>
+
diff -Naur "a/Condition expressions/Boolean operators/task.md" "b/Condition expressions/Boolean operators/task.md"
--- "a/Condition expressions/Boolean operators/task.md" 2022-04-06 14:37:38.783007703 +0900
+++ "b/Condition expressions/Boolean operators/task.md" 2022-04-06 14:38:43.195948065 +0900
@@ -1,11 +1,11 @@
-## Boolean operators
-
-Boolean operators compare statements and return results in boolean values. The boolean 
-operator `and` returns `True` when the expressions on both sides of `and` are `True`.
-The boolean operator `or` returns `True` when at least one expression on either side 
-of `or` is `True`. The boolean operator `not` inverts the boolean expression it precedes.  
-  
-Write an expression that evaluates to `True` if `name` is equal to `"John"` and
-he is `16` or older.  
-
-<div class='hint'>Use the <code>and</code> keyword and the <code>>=</code> operator.</div>
+## ブール演算子 :(Boolean operators)
+
+ブール演算子はステートメントを比較し、結果をブール値で返します。
+
+ブール演算子 `and` は、`and` の両側の式が `True` の場合、`True` を返します。  
+ブール演算子 `or` は、`or` のいずれかの側の少なくとも1つの式が `True` である場合、`True` を返します。  
+ブール演算子 `not` は、先行するブール式を反転します。
+
+`name` が `"John"` と等しく、彼が `16` 以上の場合、`True` と評価される式を記述します。
+
+<div class='hint'> <code>and</code> キーワードと <code>>=</code> 演算子を使用します</div>
diff -Naur "a/Condition expressions/Boolean operators order/task.md" "b/Condition expressions/Boolean operators order/task.md"
--- "a/Condition expressions/Boolean operators order/task.md"   2022-04-06 14:37:38.787007761 +0900
+++ "b/Condition expressions/Boolean operators order/task.md"   2022-04-06 14:38:43.211948299 +0900
@@ -1,8 +1,9 @@
-## Boolean operators order
-
-Boolean operators are not evaluated from left to right. There's an order of operations for 
-boolean operators: `not` is evaluated first, `and` is evaluated next, and `or` is evaluated last.  
-
-Write an expression that evaluates to `True` if `name` is either `"John"` or `"Jane"` who are `16` or older, but younger than `25`.
-
-<div class='hint'>Combine the <code>and</code> and <code>or</code> keywords.</div>
+## ブール演算子の順序 :(Boolean operators order)
+
+ブール演算子は左から右に評価されません。ブール演算子の演算の順序があります。
+
+`not` が最初に評価され、` and` が次に評価され、`or` が最後に評価されます。
+
+`name` が `16` 以上で `25` より若い `"John"` または `"Jane"` のいずれかである場合、`True` と評価される式を記述します。
+
+<div class='hint'> <code>and</code> と <code>or</code> キーワードを組み合わせます。</div>
diff -Naur "a/Condition expressions/Else and elif parts in if statement/task.md" "b/Condition expressions/Else and elif parts in if statement/task.md"
--- "a/Condition expressions/Else and elif parts in if statement/task.md"   2022-04-06 14:37:38.795007878 +0900
+++ "b/Condition expressions/Else and elif parts in if statement/task.md"   2022-04-06 14:38:43.219948415 +0900
@@ -1,32 +1,32 @@
-## Else and elif statements
-
-The `elif` and `else` statements complement the `if` statement. 
-There can be zero or more `elif` parts, and the `else` part is optional. The keyword 
-`elif` is short for ‘else if’, and is useful to avoid excessive indentation.
-
-<div class="hint">An <code>if … elif … elif …</code> sequence is a substitute for the <code>switch</code> or 
-<code>case</code> statements found in other languages, such as Java.</div>
-
-In conditional execution, only one of the suites is selected by evaluating the expressions one by one until one is found 
-to be `True`. Then that suite is executed and no other part of the `if` statement is evaluated. 
-If all expressions are false, the suite of the `else` clause, if present, is executed.
-
-
-```python
-a = 200
-b = 33
-if b > a:
-  print("b is greater than a")
-elif a == b:
-  print("a and b are equal")
-else:
-  print("a is greater than b")
-```
-```text
-a is greater than b
-```
-  
-Print `True` if `name` is equal to `"John"` and `False` otherwise.  
-
-<div class='hint'>Use the <code>if</code> keyword and the <code>==</code> operator.</div>
-<div class='hint'>Use the <code>else</code> keyword.</div>
+## else および elif ステートメント :(Else and elif parts in if statement)
+
+`elif` および `else` ステートメントは `if` ステートメントを補完します。
+
+0個以上の `elif` 部分があり、`else` 部分はオプションです。キーワード `elif` は「else if」の略で、過度のインデントを回避するのに役立ちます。
+
+<div class='hint'> <code>if … elif … elif …</code> シーケンスは、Java など他の言語で見られる <code>switch</code> または <code>case</code> ステートメントの代わりになります。</div>
+
+条件付き実行では、1つが `True` であることが判明するまで、式を1つずつ評価することにより、スイートの1つだけが選択されます。
+
+次に、そのスイートが実行され、`if` ステートメントの他の部分は評価されません。
+
+すべての式が `false` の場合、 `else` 句のスイート(存在する場合)が実行されます。
+
+```python
+a = 200
+b = 33
+if b > a:
+  print("b is greater than a")
+elif a == b:
+  print("a and b are equal")
+else:
+  print("a is greater than b")
+```
+```text
+a is greater than b
+```
+  
+`name` が `"John"` と等しい場合は `True` を出力し、そうでない場合は `False` を出力します。
+
+<div class='hint'> <code>if</code> キーワードと <code>==</code> 演算子を使用します。</div>
+<div class='hint'> <code>else</code> キーワードを使用します。</div>
diff -Naur "a/Condition expressions/If statement/task.md" "b/Condition expressions/If statement/task.md"
--- "a/Condition expressions/If statement/task.md"  2022-04-06 14:37:38.791007820 +0900
+++ "b/Condition expressions/If statement/task.md"  2022-04-06 14:38:43.215948356 +0900
@@ -1,32 +1,36 @@
-## If statement
-
-Compound statements in Python contain (groups of) other statements; they affect or control 
-the execution of those other statements in some way.
-
-Perhaps the most well-known statement type is the `if` statement. The `if` keyword is 
-used to form a conditional statement that executes some 
-specified code after checking if its expression is `True`. Python uses indentation 
-to define code blocks: 
-
-```python
-if value > 1000: 
-    print("It's a large number!")  # Indented block
-    a += 1                         # Indented block
-    
-print("Outside the block!")        
-```
-
-A code block starts with indentation and ends with the first unindented line. The amount of indentation must 
-be consistent throughout the block. Generally, four whitespaces or single tabs are used for indentation.
-Incorrect indentation will result in `IndentationError`.
-
-If you have only one statement to execute, you can put it on the same line as the `if` statement.
-
-```python
-if a > b: print("a is greater than b")
-```
-
-Print `"empty"` if the `tasks` list is empty.  
-After the list is cleared, check again (you might need a different condition!) and print `'Now empty!'` if it is.
-
-<div class='hint'>Use the <code>len()</code> function to check if <code>tasks</code> is empty.</div>
+## If ステートメント :(If statement)
+
+Python の複合ステートメントには、他のステートメント(のグループ)が含まれています。
+それらは、何らかの方法でそれらの他のステートメントの実行に影響を与えるか、または制御します。
+
+おそらく最もよく知られているステートメントタイプは `if` ステートメントです。
+`if` キーワードは、その表現が `True` であるかどうかをチェックした後、指定されたコードを実行する条件ステートメントを形成するために使用されます。
+
+Python はインデントを使用してコードブロックを定義します:
+
+```python
+if value > 1000: 
+    print("It's a large number!")  # Indented block
+    a += 1                         # Indented block
+    
+print("Outside the block!")
+```
+
+コードブロックはインデントで始まり、インデントされていない最初の行で終わります。
+
+インデントの量は、ブロック全体で一貫している必要があります。
+通常、インデントには 4つの空白または 1つのタブが使用されます。
+
+インデントが正しくないと、`IndentationError` が発生します。
+
+実行するステートメントが 1つしかない場合は、それを `if` ステートメントと同じ行に配置できます:
+
+```python
+if a > b: print("a is greater than b")
+```
+
+`tasks` リストが空の場合は `"empty"` を出力します。
+リストがクリアされたら、もう一度確認し(別の条件が必要になる場合があります!)、
+そうである場合は `'Now empty!'` を出力します。
+
+<div class='hint'> <code>len()</code> 関数を使用して、 <code>tasks</code> が空かどうかを確認します。</div>
diff -Naur "a/Data structures/Dictionaries/task.md" "b/Data structures/Dictionaries/task.md"
--- "a/Data structures/Dictionaries/task.md"    2022-04-06 14:37:38.819008229 +0900
+++ "b/Data structures/Dictionaries/task.md"    2022-04-06 14:38:43.243948765 +0900
@@ -1,32 +1,39 @@
-## Dictionaries
-
-A dictionary is similar to a list, except that you access its values by looking up a 
-key instead of an index. A key can be any immutable type. Strings and numbers can 
-always be keys; tuples can be used as keys if they contain only immutable objects. 
-You can’t use lists as keys. 
-
-Think of a dictionary as a set of <code>key: value</code> pairs, with the requirement 
-that the keys are unique within one dictionary. Dictionaries are enclosed 
-in curly braces, e.g., `dct = {'key1' : "value1", 'key2' : "value2"}`. A pair of 
-braces creates an empty dictionary: `{}`.  
-
-A dictionary can also be created with the `dict` constructor:
-```python
-a = dict(one=1, two=2, three=3)
-b = {'one': 1, 'two': 2, 'three': 3}
-c = dict([('two', 2), ('one', 1), ('three', 3)])
-print(a == b == c)
-```
-```text
-True
-```
-
-You can access a value in a dictionary similarly to how you would access a value in a list,
-but using a key instead of an index. More info about this data structure can be found 
-<a href="https://docs.python.org/3/tutorial/datastructures.html#dictionaries">here</a>.
-
-Add Jared's (`"Jared"`) number `570` to the phone book.
-Remove Gerard's number from the phone book.
-Print Jane's phone number from the `phone_book`.  
-
-<div class='hint'>Use dictionary indexing, e.g., <code>dct[key]</code></div>
+## 辞書 :(Dictionaries)
+
+辞書はリストに似ていますが、インデックスの代わりにキーを検索して値にアクセスする点が異なります。
+
+キーは任意の不変タイプにすることができます。
+文字列と数字は常にキーにすることができます。
+タプルに不変オブジェクトのみが含まれている場合は、タプルをキーとして使用できます。
+リストをキーとして使用することはできません。
+
+辞書を <code>key: value</code> のペアのセットと考えてください。
+
+ただし、キーは1つの辞書内で一意である必要があります。
+
+辞書は中かっこで囲まれています:
+
+例:  `dct = {'key1' : "value1", 'key2' : "value2"}`
+
+中括弧のペアは空の辞書 `{}` を作成します。
+
+辞書は、`dict` コンストラクター(constructor) を使用して作成することもできます:
+
+```python
+a = dict(one=1, two=2, three=3)
+b = {'one': 1, 'two': 2, 'three': 3}
+c = dict([('two', 2), ('one', 1), ('three', 3)])
+print(a == b == c)
+```
+```text
+True
+```
+リストの値にアクセスするのと同じようにディクショナリの値にアクセスできますが、インデックスの代わりにキーを使用します。
+
+このデータ構造の詳細については、<a href="https://docs.python.org/3/tutorial/datastructures.html#dictionaries">こちら</a> をご覧ください。
+
+Jared( `"Jared"`)の番号 `570` を電話帳に追加します。
+電話帳からGerard の番号を削除します。
+電話帳の `phone_book` から Jane(ジェーン)の電話番号を出力します。
+
+<div class='hint'>辞書のインデックスを使用します(例: <code>dct[key]</code></div>)
diff -Naur "a/Data structures/Dictionary keys() and values()/task.md" "b/Data structures/Dictionary keys() and values()/task.md"
--- "a/Data structures/Dictionary keys() and values()/task.md"  2022-04-06 14:37:38.823008287 +0900
+++ "b/Data structures/Dictionary keys() and values()/task.md"  2022-04-06 14:38:43.247948823 +0900
@@ -1,19 +1,21 @@
-## Dictionary keys() and values()
-
-There are many useful methods in dictionaries, such as `keys()`,  `values()`, and `items()`. 
-The `keys()` method returns a view object that displays a list of all the keys in the dictionary in order of insertion. 
-`values()` returns a new view of the dictionary’s values. When the `items()` method is called,
-it returns a new view of the dictionary’s items as tuples in a list (`(key, value)` pairs).
-
-The objects returned by `dict.keys()`, `dict.values()`, and `dict.items()` provide a 
-dynamic view on the dictionary’s entries, which means 
-that when the dictionary changes, the view reflects these changes.
-
-You can explore the rest using &shortcut:CodeCompletion; after `dict_name` 
-followed by a dot.
-
-Read more about the operations that dictionaries support <a href="https://docs.python.org/3/library/stdtypes.html#typesmapping">here</a>.
-
-Print all values from the `phone_book` .  
-
-<div class='hint'>Use the method <code>values()</code>.</div>
+## 辞書の keys() と values()  :(Dictionary keys() and values())
+
+辞書には、`keys()`、`values()`、`items()` などの便利なメソッドがたくさんあります。
+
+`keys()` メソッドは、辞書内のすべてのキーのリストを挿入順に表示するビューオブジェクトを返します。
+
+`values()` は、ディクショナリの値の新しいビューを返します。
+
+`items()` メソッドが呼び出されると、辞書のアイテムの新しいビューがリスト内のタプル `(key, value)` ペアとして返されます。
+
+ `dict.keys()`、`dict.values()`、および `dict.items()` によって返されるオブジェクトは、ディクショナリのエントリの動的ビューを提供します。つまり、ディクショナリが変更されると、ビューはこれらの変更を反映します。
+
+&shortcut:CodeCompletion; を使用して残りを探索できます。
+
+ `dict_name` の後にドットが続きます。
+
+辞書がサポートする操作の詳細については、<a href="https://docs.python.org/3/library/stdtypes.html#typesmapping">こちら</a> をご覧ください。
+
+電話帳の `phone_book` からすべての値を出力します。
+
+<div class='hint'>メソッド <code>values()</code>を使用します。</div>
diff -Naur "a/Data structures/In keyword/task.md" "b/Data structures/In keyword/task.md"
--- "a/Data structures/In keyword/task.md"  2022-04-06 14:37:38.827008346 +0900
+++ "b/Data structures/In keyword/task.md"  2022-04-06 14:38:43.251948881 +0900
@@ -1,13 +1,14 @@
-## In keyword
-
-The `in` keyword is used to check if a list or a dictionary contains a specific 
-item. You can apply `in` to lists or dictionaries the same way you did it with strings.  
-  
-1) Check if `grocery_dict` values contain number `6`.  
-2) Check if the dictionary contains `"basil"`.
-
-Please complete the task in the specified order.
-
-<div class="hint">Use the <code>in</code> keyword.</div>
-
-<div class="hint">Use the <code>.values()</code> and <code>.keys()</code> attributes.</div>
+## In キーワード :(In keyword)
+
+`in` キーワードは、リストまたは辞書に特定の項目が含まれているかどうかを確認するために使用されます。
+文字列で行ったのと同じ方法で、リストまたは辞書に `in` を適用できます。
+
+
+1) `grocery_dict` の値に番号 `6` が含まれているかどうかを確認します。
+2) 辞書に `"basil"` (バジル)が含まれているかどうかを確認します。
+
+指定された順序で課題を完了してください。
+
+<div class='hint'> <code>in</code> キーワードを使用します。</div>
+
+<div class='hint'> <code>.values()</code> 属性と <code>.keys()</code> 属性を使用します。</div>
diff -Naur "a/Data structures/Join method/task.md" "b/Data structures/Join method/task.md"
--- "a/Data structures/Join method/task.md" 2022-04-06 14:37:38.815008171 +0900
+++ "b/Data structures/Join method/task.md" 2022-04-06 14:38:43.239948707 +0900
@@ -1,42 +1,44 @@
-## The join() method
-
-`.join()` is, in fact, a string method, but we're discussing it now because it 
-requires understanding of iterable objects, such as strings, lists, and tuples.
-This [method](https://docs.python.org/3/library/stdtypes.html#str.join) provides a flexible way to create strings from iterable objects. 
-It joins each element of an iterable (such as list, string, or tuple) by 
-a string separator (a string on which the `join()` method is called) and 
-returns a concatenated string. A `TypeError` will be raised if there are 
-any non-string values in the iterable. 
-
-The syntax of the `join()` method looks as follows:
-
-```python
-string.join(iterable)
-```
-
-Examples:
-
-```python
-string_ = 'abcde'  # a string iterable
-tuple_ = ('aa', 'bb', 'cc')  # a tuple iterable
-list_ = ['Python', 'programming language']  # a list iterable
-
-print(' + '.join(string_))  # join with the ' + ' separator
-print(' = '.join(tuple_))  # join with the ' = ' separator
-
-sep = ' is a '
-print(sep.join(list_))  # join with the ' is a ' separator
-```
-```text
-a + b + c + d + e
-aa = bb = cc
-Python is a programming language
-```
-
-Assign a value to the  `joined` variable such that the `print` statement prints the following:
-```text
-I like apples and I like bananas and I like peaches and I like grapes
-```
-
-<div class="hint">Look closely at the examples and simply do the same!</div>
-<div class="hint"><code>fruits</code> is your iterable here, and <code>separator</code> is the separator string.</div>
\ ファイル末尾に改行がありません
+##  join() メソッド :(Join method)
+
+`.join()` は実際には文字列メソッドですが、文字列、リスト、タプルなどの反復可能なオブジェクトを理解する必要があるため、ここで説明します。
+
+この[メソッド](https://docs.python.org/3/library/stdtypes.html#str.join) は、反復可能なオブジェクトから文字列を作成するための柔軟な方法を提供します。
+
+iterable の各要素(list、string、tuple など)を文字列セパレータ(`join()` メソッドが呼び出される文字列)で結合し、連結された文字列を返します。
+
+iterable に文字列以外の値がある場合、`TypeError` が発生します。
+
+`join()` メソッドの構文は次のようになります:
+
+```python
+string.join(iterable)
+```
+
+例:
+
+```python
+string_ = 'abcde'  # a string iterable
+tuple_ = ('aa', 'bb', 'cc')  # a tuple iterable
+list_ = ['Python', 'programming language']  # a list iterable
+
+print(' + '.join(string_))  # join with the ' + ' separator
+print(' = '.join(tuple_))  # join with the ' = ' separator
+
+sep = ' is a '
+print(sep.join(list_))  # join with the ' is a ' separator
+```
+```text
+a + b + c + d + e
+aa = bb = cc
+Python is a programming language
+```
+`print` ステートメントが次のように出力するように `joined` 変数に値を割り当てます:
+
+```text
+I like apples and I like bananas and I like peaches and I like grapes
+```
+
+<div class='hint'>例をよく見て、同じことをしてください!</div>
+
+<div class='hint'><code>fruits</code>が反復可能であり、<code>separator</code> がセパレータ文字列です。</div>
+
diff -Naur "a/Data structures/List items/task.md" "b/Data structures/List items/task.md"
--- "a/Data structures/List items/task.md"  2022-04-06 14:37:38.807008054 +0900
+++ "b/Data structures/List items/task.md"  2022-04-06 14:38:43.231948590 +0900
@@ -1,12 +1,13 @@
-## List items
-
-Assignment is possible to slices of lists, just like to individual list elements. 
-This way you can even change the size of a list or clear it entirely by doing something like:
-
-```python
-animals[:] = []
-```
-  
-Make all `animals` elephants by replacing the last two items.  
-
-<div class='hint'>Use assignment to a slice as in examples.</div>
+## リストのアイテム :(List items)
+
+個々のリスト要素と同様に、リストのスライスに割り当てることができます。
+
+次のような操作を行うことで、リストのサイズを変更したり、リストを完全にクリアしたりすることもできます:
+
+```python
+animals[:] = []
+```
+  
+最後の 2つのアイテムを置き換えて、すべての `animals` の象 (elephants) を作ります。
+
+<div class='hint'>例のようにスライスへの割り当てを使用します。</div>
diff -Naur "a/Data structures/Lists introduction/task.md" "b/Data structures/Lists introduction/task.md"
--- "a/Data structures/Lists introduction/task.md"  2022-04-06 14:37:38.799007937 +0900
+++ "b/Data structures/Lists introduction/task.md"  2022-04-06 14:38:43.219948415 +0900
@@ -1,23 +1,29 @@
-## Lists introduction
-
-Python has a number of compound data types used to group data together. 
-The most versatile is the list, which can be written as a series of comma-separated 
-values (items) enclosed in square brackets, e.g., `lst = [item1, item2]`. 
-Lists might contain items of different types, but usually all the items in a list 
-are of the same type. Like strings, lists can be indexed and sliced (see [Lesson 3](course://Strings/String slicing)).
-All slice operations return a new list containing the requested elements.
-
-Lists also support operations like concatenation:
-
-```python
-squares = [1, 4, 9, 16, 25]
-squares + [36, 49, 64, 81, 100]
-[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
-```
-
-You can explore lists in more detail by reading <a href="https://docs.python.org/3.9/tutorial/introduction.html#lists">this page</a>.
-
-Use list slicing to print `[4, 9, 16]`.  
-
-<div class='hint'>List slicing syntax looks just like that for strings: <code>lst[index1:index2]</code>.
-Don't forget that the element with the index <code>index2</code> is not included!</div>
+## リストの紹介 :(Lists introduction)
+
+Python には、データをグループ化するために使用されるいくつかの複合データ型があります。
+
+最も用途が広いのはリストです。
+これは、角かっこで囲まれた一連のカンマ区切りの値(アイテム)として記述できます。
+(例: `lst = [item1, item2]`)
+
+リストにはさまざまなタイプのアイテムが含まれている場合がありますが、通常、リスト内のすべてのアイテムは同じタイプです。
+
+文字列と同様に、リストにはインデックスを付けてスライスすることができます。
+([レッスン3](course:// Strings / Stringslicing)を参照)
+
+すべてのスライス操作は、要求された要素を含む新しいリストを返します。
+
+リストは、連結などの操作もサポートします:
+
+```python
+squares = [1, 4, 9, 16, 25]
+squares + [36, 49, 64, 81, 100]
+[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
+```
+
+リストの詳細については、<a href="https://docs.python.org/3.9/tutorial/introduction.html#lists">このページ</a> をご覧ください。
+
+リストスライスを使用して `[4, 9, 16]` を出力します。
+
+<div class='hint'>リストのスライス構文は、文字列の場合と同じように見えます: <code>lst[index1:index2]</code>
+インデックス <code>index2</code> の要素は含まれていないことを忘れないでください!</div>
diff -Naur "a/Data structures/Lists operations/task.md" "b/Data structures/Lists operations/task.md"
--- "a/Data structures/Lists operations/task.md"    2022-04-06 14:37:38.803007995 +0900
+++ "b/Data structures/Lists operations/task.md"    2022-04-06 14:38:43.227948532 +0900
@@ -1,36 +1,35 @@
-## List operations
-
-Unlike strings, lists are a mutable type, i.e., it is possible to
-change their content using `lst[index] = new_item`.
-
-```python
-cubes = [1, 8, 27, 65, 125]  # something's wrong here
-4 ** 3  # the cube of 4 is 64, not 65!
-```
-```text
-64
-```
-```python
-cubes[3] = 64  # replace the wrong value
-cubes
-```
-```text
-[1, 8, 27, 64, 125]
-```
-
-You can add new items at the end of the list by using the `append()` method or 
-list concatenation. 
-
-```python
-squares = [1, 4, 9, 16, 25]
-squares.append(6**2)
-squares
-```
-```text
-[1, 4, 9, 16, 25, 36]
-```
-  
-Find out about many other useful list methods on <a href="https://docs.python.org/3/tutorial/datastructures.html#more-on-lists">this page</a>.
-
-Replace `"dino"` with `"dinosaur"` in the `animals` list.  
-<div class='hint'>Use list indexing operation and value assignment.</div>
+## リストの操作 :(List operations)
+
+文字列とは異なり、リストは変更可能なタイプです。
+つまり、`lst[index] = new_item` を使用してコンテンツを変更できます。
+
+```python
+cubes = [1, 8, 27, 65, 125]  # something's wrong here
+4 ** 3  # the cube of 4 is 64, not 65!
+```
+```text
+64
+```
+```python
+cubes[3] = 64  # replace the wrong value
+cubes
+```
+```text
+[1, 8, 27, 64, 125]
+```
+ `append()` メソッドまたはリスト連結を使用して、リストの最後に新しいアイテムを追加できます。
+
+```python
+squares = [1, 4, 9, 16, 25]
+squares.append(6**2)
+squares
+```
+```text
+[1, 4, 9, 16, 25, 36]
+```
+
+<a href="https://docs.python.org/3/tutorial/datastructures.html#more-on-lists">このページ</a> で他の多くの便利なリストメソッドについて調べてください。
+
+`animals` リストの `"dino"` を `"dinosaur"` に置き換えます。
+
+<div class='hint'>リストのインデックス作成操作と値の割り当てを使用します。</div>
diff -Naur "a/Data structures/Nested Lists/task.md" "b/Data structures/Nested Lists/task.md"
--- "a/Data structures/Nested Lists/task.md"    2022-04-06 14:37:38.811008112 +0900
+++ "b/Data structures/Nested Lists/task.md"    2022-04-06 14:38:43.231948590 +0900
@@ -1,36 +1,41 @@
-## Nested Lists
-
-A list can contain any kind of objects, even other lists (sublists). This 
-data structure is known as a nested list.
-
-You can use nested lists to arrange data into hierarchical structures.
-
-A nested list can be created by writing a comma-separated sequence of sublists:
-
-```python
-nested_list = [[1, 2, 3], [4, 5], 6]
-```
-
-You can access items in a nested list using indices just like before:
-
-```python
-print(nested_list[1])
-print(nested_list[2])
-```
-Output:
-```text
-[4, 5]
-6
-```
-You can access items within sublists in a nested list using multiple indices.
-To access number `1` from `nested_list`, use the index `0` twice. First, you access the element `[1,2,3]` and then, the first element of that sublist:
-```python
-print(nested_list[0][0])
-```
-Output:
-```text
-1
-```
-In the code editor, use indexing to access and print elements `9` and `10` from of the nested list `my_list`. 
-
-<div class="hint">If you're stuck, review the examples in the task description again.</div>
\ ファイル末尾に改行がありません
+## ネストされたリスト :(Nested Lists)
+
+リストには、他のリスト(サブリスト)も含め、あらゆる種類のオブジェクトを含めることができます。
+このデータ構造は、「ネストされたリスト」と呼ばれます。
+
+ネストされたリストを使用して、データを階層構造に配置できます。
+
+ネストされたリストは、サブリストのコンマ区切りシーケンスを作成することで作成できます:
+
+```python
+nested_list = [[1, 2, 3], [4, 5], 6]
+```
+以前と同じように、インデックスを使用してネストされたリストのアイテムにアクセスできます:
+
+```python
+print(nested_list[1])
+print(nested_list[2])
+```
+Output:
+```text
+[4, 5]
+6
+```
+
+複数のインデックスを使用して、ネストされたリストのサブリスト内のアイテムにアクセスできます。
+`nested_list` から番号 `1` にアクセスするには、インデックス `0` を2回使用します。
+
+まず、要素 `[1,2,3]` にアクセスし、次にそのサブリストの最初の要素にアクセスします:
+
+```python
+print(nested_list[0][0])
+```
+Output:
+```text
+1
+```
+
+コードエディタで、インデックスを使用して、ネストされたリスト `my_list` の要素 `9` と `10` にアクセスして出力します。
+
+<div class='hint'>行き詰まった場合は、「課題の説明」ウィンドウにある例をもう一度確認してください。</div>
+
diff -Naur "a/Data structures/Tuples/task.md" "b/Data structures/Tuples/task.md"
--- "a/Data structures/Tuples/task.md"  2022-04-06 14:37:38.815008171 +0900
+++ "b/Data structures/Tuples/task.md"  2022-04-06 14:38:43.235948648 +0900
@@ -1,49 +1,57 @@
-## Tuples
-
-Tuples represent another standard sequence data type.
-They are almost identical to lists. The only significant difference between tuples and 
-lists is that tuples are immutable: you cannot add, replace, or delete elements in 
-a tuple. Tuples are constructed by comma-separated elements enclosed in parentheses, for 
-example: 
-
-```python
-(a, b, c)
-```
- 
-A special situation is the construction of tuples containing 0 or 1 items. 
-Empty tuples are constructed by an empty pair of parentheses; 
-a tuple with one item is constructed by following a value with a comma. For example:
-
-```python
-empty = ()
-singleton = 'hello',    # <-- note the trailing comma
-len(empty)
-```
-```text
-0
-```
-```python
-len(singleton)
-```
-```text
-1
-```
-```python
-singleton
-```
-```text
-('hello',)
-```
-
-The statement `t = 12345, 54321, 'hello!'` is an example of tuple packing: the 
-values `12345`, `54321`, and `hello!` are packed together in a tuple. 
-
-Some other list methods are also 
-applicable to tuples. You can read more about tuples <a href="https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences">here</a>.
-  
-Print the length of the tuple `alphabet`. Then create a tuple with a single element `'fun_tuple'`. 
-You can run the code to see what it prints.  
-
-<div class='hint'>Use the <code>len()</code> function.</div>
-
-<div class='hint'>Don't forget the trailing comma in the tuple with one element.</div>
+## タプル :(Tuples)
+
+タプルは、別の標準シーケンスデータ型を表します。
+
+それらはリストとほとんど同じです。
+タプルとリストの唯一の重要な違いは、タプルは不変であるということです。
+タプル内の要素を追加、置換、または削除することはできません。
+
+タプルは、括弧で囲まれたコンマ区切りの要素で構成されます。
+
+次に例を示します:
+
+```python
+(a, b, c)
+```
+ 
+特別な状況は、0 または 1個のアイテムを含むタプルの構築です。
+空のタプルは、空の括弧のペアで構成されます。
+1つの項目を持つタプルは、値の後にコンマを付けて作成されます。
+
+例えば:
+
+```python
+empty = ()
+singleton = 'hello',    # <-- note the trailing comma
+len(empty)
+```
+```text
+0
+```
+```python
+len(singleton)
+```
+```text
+1
+```
+```python
+singleton
+```
+```text
+('hello',)
+```
+
+ステートメント `t = 12345, 54321, 'hello!'` は、タプルパッキングの例です。
+
+値 `12345`、 `54321`、および `hello!` はタプルに一緒にパックされます。
+
+他のいくつかのリストメソッドもタプルに適用できます。
+
+タプルの詳細については、<a href="https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences">こちら</a> をご覧ください。
+
+タプル`alphabet` の長さを出力します。
+次に、単一の要素 `'fun_tuple'` を使用してタプルを作成します。
+コードを実行して、何が出力されるかを確認できます。
+
+<div class='hint'> <code>len()</code> 関数を使用します。</div>
+<div class='hint'>1つの要素を持つタプルの末尾のコンマを忘れないでください。</div>
diff -Naur "a/File input output/Open file/task.md" "b/File input output/Open file/task.md"
--- "a/File input output/Open file/task.md" 2022-04-06 14:37:38.835008463 +0900
+++ "b/File input output/Open file/task.md" 2022-04-06 14:38:43.259948998 +0900
@@ -1,37 +1,49 @@
-## Open file
-Python has a number of built-in functions to read and write information to a file on your computer.
-
-`open()` returns a file object, and is most commonly used with two arguments: `open(filename, mode)`:
-```python
-f = open('somefile.txt', 'w')
-```
-The first argument is a string containing the filename. The second argument is another string containing
-a few characters describing the way in which the file will be used. It can be `'r'` if the file
-will only be read, `'w'` – for writing only (an already existing file with the same name will be erased), and
-`'a'` opens the file for appending – any data written to the file is added to its end.
-`'r+'` opens the file for both reading and writing. The mode argument is optional; `'r'` will be assumed
-if it’s omitted.
-
-It is good practice to use the `with` keyword when dealing with file objects. The advantage is that the
-file is properly closed after the code suite finishes.
-
-```python
-with open('somefile.txt') as f:
-    read_data = f.read()
-
-# We can check that the file has been automatically closed.
-f.closed
-```
-```text
-True
-```
-**Important**: If you’re not using the `with` keyword, then you should call `f.close()` to close the file and 
-free up any system resources used by it. You cannot use the file object after it is closed, whether by a `with` statement or by calling `f.close()`.
-
-In the code editor, open the file `input1.txt` in read mode properly using the `with` statement. Check out the
-name that is used for the file on the next line and use it. Afterwards, close the output file `outfile` that was opened. 
-
-After running your code, check out the output file that appeared in the course view among the other files.
-
-<div class="hint">Supply the <code>r</code> argument to the method <code>open()</code>,
-just for the sake of practicing!</div>
+## ファイルを開く :(Open file)
+
+Python には、コンピューター上のファイルに対して情報を読み書きするための多数の組み込み関数があります。
+
+`open()` はファイルオブジェクトを返し、最も一般的には 2つの引数で使用されます: `open(filename, mode)`:
+
+```python
+f = open('somefile.txt', 'w')
+```
+
+最初の引数は、ファイル名を含む文字列です。 
+
+2番目の引数は、ファイルの使用方法を説明するいくつかの文字を含む別の文字列です。
+
+ファイルが読み取り専用の場合は `'r'`、書き込み専用の場合は `'w'`(同じ名前の既存のファイルは消去されます)、
+追加するときは `'a'`(ファイルに書き込まれたデータはすべてそのファイルの最後に追加されます)、でファイルを開きます。
+
+読み取りと書き込みの両方のの場合は `'r+'` 、でファイルを開きます。
+
+mode 引数はオプションです。省略した場合は `'r'` が想定されます。
+
+ファイルオブジェクトを処理するときは、`with` キーワードを使用することをお勧めします。
+利点は、コードスイートの終了後にファイルが適切に閉じられることです。
+
+```python
+with open('somefile.txt') as f:
+    read_data = f.read()
+
+#  We can check that the file has been automatically closed.
+f.closed
+```
+→ファイルが自動的に閉じられたことを確認できます。
+
+```text
+True
+```
+
+**重要**:  `with` キーワードを使用していない場合は、 `f.close()` を呼び出してファイルを閉じ、ファイルが使用しているシステムリソースを解放する必要があります。
+
+`with` ステートメントまたは `f.close()` の呼び出しによって、ファイルオブジェクトを閉じた後は使用できません。
+
+コードエディタで、 `with` ステートメントを使用して、ファイル `input1.txt` を読み取りモードで適切に開きます。
+次の行のファイルに使用されている名前を確認して使用してください。
+
+その後、開いた出力ファイル `outfile` を閉じます。
+
+コードを実行した後、他のファイルの中で「コースの表示」ウィンドウに表示された出力ファイルを確認してください。
+
+<div class='hint'>練習のためだけに!、 <code>r</code> 引数をメソッド <code>open()</code>に指定します。</div>
diff -Naur "a/File input output/Read file/task.md" "b/File input output/Read file/task.md"
--- "a/File input output/Read file/task.md" 2022-04-06 14:37:38.839008521 +0900
+++ "b/File input output/Read file/task.md" 2022-04-06 14:38:43.263949056 +0900
@@ -1,62 +1,62 @@
-## Read file
-
-
-To read a file’s contents, you can call `f.read(size)`, which reads some quantity of data and returns it as 
-a string. When size is omitted or negative, the entire contents of the file will be read and returned.
-
-```python
-with open('somefile.txt') as f:
-    print(f.read())
-```
-```text
-Here's everything that's in the file.\n
-```
-<i>**Note**: there will be a problem if the file is twice as large as your machine’s memory.</i>
-
-
-`f.readline()` reads a single line from the file; a newline character (`\n`) is left at the end of the 
-string and is only omitted on the last line of the file if the file doesn’t end in a newline. If `f.readline()` 
-returns an empty string, the end of the file has been reached, while a blank line is represented by `\n`, 
-a string containing only a single newline.
-
-```python
-f.readline()
-```
-```text
-'This is the first line of the file.\n'
-```
-```python
-f.readline()
-```
-```text
-'Second line of the file\n'
-```
-```python
-f.readline()
-```
-```text
-''
-``` 
-For reading lines from a file, you can loop over the file object. This is memory efficient, fast, and 
-makes the code simple:
-```python
-for line in f:
-    print(line)
-```
-```text
-This is the first line of the file.
-Second line of the file
-```
-
-If you want to read all the lines of a file in a list, you can also use `list(f)` or `f.readlines()`.
-
-
-For more details, check out the section [Methods of File Objects](https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects) in Python Tutorial.
-
-
-Print the contents of "input.txt" to output by iterating over the lines of the file and printing each one.
-Then print only the first line of "input1.txt".
-
-<div class="hint">Loop over the file object as in the example in the task description.</div>
-<div class='hint'>Use the <code>print</code> function.</div>
-<div class='hint'>Use the <code>readline()</code> method to print a single line.</div>
+## ファイルを読む :(Read file)
+
+ファイルの内容を読み取るには、 `f.read(size)` を呼び出すことができます。
+これは、ある量のデータを読み取り、それを文字列として返します。
+サイズが省略または負の場合、ファイルの内容全体が読み取られて返されます。
+
+```python
+with open('somefile.txt') as f:
+    print(f.read())
+```
+```text
+Here's everything that's in the file.\n
+```
+<i>**注**: ファイルがマシンのメモリの 2倍の大きさである場合、問題が発生します。</i>
+
+`f.readline()` はファイルから 1行を読み取ります。
+
+改行文字 (`\n`) は文字列の最後に残され、ファイルが改行で終わっていない場合にのみファイルの最後の行で省略されます。
+
+ `f.readline()` が空の文字列を返す場合、ファイルの終わりに達していますが、空白行は、単一の改行のみを含む文字列である`\n` で表されます。
+
+```python
+f.readline()
+```
+```text
+'This is the first line of the file.\n'
+```
+```python
+f.readline()
+```
+```text
+'Second line of the file\n'
+```
+```python
+f.readline()
+```
+```text
+''
+``` 
+
+ファイルから行を読み取るために、ファイルオブジェクトをループできます。
+これはメモリ効率が高く、高速で、コードをシンプルにします:
+
+```python
+for line in f:
+    print(line)
+```
+```text
+This is the first line of the file.
+Second line of the file
+```
+
+リスト内のファイルのすべての行を読み取りたい場合は、 `list(f)` または `f.readlines()` を使用することもできます。
+
+詳細については、Python チュートリアルの [ファイルオブジェクトのメソッド](https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects) のセクションを確認してください。
+
+「input.txt」の内容を表示して、ファイルの行を繰り返して出力します。
+次に、「input1.txt」の最初の行のみを出力します。
+
+<div class='hint'>「課題の説明」ウィンドウの例のようにファイルオブジェクトをループします。</div>
+<div class='hint'> <code>print</code> 関数を使用します。</div>
+<div class='hint'> <code>readline()</code> メソッドを使用して 1行を出力します。</div>
diff -Naur "a/File input output/What next/task.md" "b/File input output/What next/task.md"
--- "a/File input output/What next/task.md" 2022-04-06 14:37:38.843008580 +0900
+++ "b/File input output/What next/task.md" 2022-04-06 14:38:43.267949115 +0900
@@ -1,14 +1,17 @@
-Congratulations, you made it to the end of the course! We hope you enjoyed it.
-
-If you would like to leave general feedback – write us a review on the course’s Marketplace [page](https://plugins.jetbrains.com/plugin/16630-introduction-to-python/reviews).
-If you want to contribute, feel free to create a pull request or an issue in the course’s [GitHub repo](https://github.com/jetbrains-academy/introduction_to_python).
-
-### What next?
-
-Now that you’ve explored the basics of Python programming, you can dive deeper and polish your new skills! Here are some options for you:
-- Learn about the most widely used Python library with our [course on NumPy](https://plugins.jetbrains.com/plugin/18302-python-libraries--numpy).
-- Find out how to build an [AMazing](https://plugins.jetbrains.com/plugin/17519-amazing) maze with Python.
-- Discover the basics of [Machine Learning](https://plugins.jetbrains.com/plugin/18392-machine-learning-101).
-- Check out the projects in the [Python Core](https://hyperskill.org/tracks/2) or [Python for Beginners](https://hyperskill.org/tracks/6) track at JetBrains Academy.
-
-Stay tuned for new courses and updates!
+おめでとうございます、コースは終了しました。楽しんでいただけたでしょうか。:(What next)
+
+一般的なフィードバックを残したい場合は、コースのマーケットプレイス[ページ](https://plugins.jetbrains.com/plugin/16630-introduction-to-python/reviews) にレビューを書いてください。
+
+貢献したい場合は、コースの[GitHubレポジトリ](https://github.com/jetbrains-academy/introduction_to_python) でプルリクエスト、または問題を自由に作成してください。
+
+### 次は何?
+
+Python プログラミングの基本を学んだので、さらに深く掘り下げて新しいスキルを磨くことができます。
+ここにあなたのためのいくつかのオプションがあります:
+
+- [NumPyのコース](https://plugins.jetbrains.com/plugin/18302-python-libraries--numpy) で、最も広く使用されているPython ライブラリについて学びます。
+- Pythonで[AMazing](https://plugins.jetbrains.com/plugin/17519-amazing) 迷路を構築する方法をご覧ください。
+- [機械学習](https://plugins.jetbrains.com/plugin/18392-machine-learning-101) の基本をご覧ください。
+- JetBrains Academy の[PythonCore](https://hyperskill.org/tracks/2) または [Python for Beginners](https://hyperskill.org/tracks/6) トラックでプロジェクトを確認してください。
+
+新しいコースとアップデートをお楽しみに!
diff -Naur "a/File input output/Write to file/task.md" "b/File input output/Write to file/task.md"
--- "a/File input output/Write to file/task.md" 2022-04-06 14:37:38.843008580 +0900
+++ "b/File input output/Write to file/task.md" 2022-04-06 14:38:43.263949056 +0900
@@ -1,63 +1,69 @@
-## Write to file
-
-As we already mentioned, if you use `'w'` as the second argument in `open()`, the file opens for 
-writing only. A new empty file will be created. If another file with the same name already exists, it 
-will be erased. If you want to add some content to an existing file, you should use the `'a'` 
-(append) modifier.  
-  
-Another file object method, `f.write(string)`, writes the contents of a <i>string</i> to the file, returning the 
-number of characters written.
-
-```python
-f.write('This is a test\n')
-```
-```text
-15
-```
-Other types of objects in text mode need to be converted into a string first:
-```python
-value = ('the answer', 42)
-s = str(value)  # convert the tuple into string
-f.write(s)
-```
-```python
-18
-```
-Where the specified text will be inserted in the file depends on the file mode (`'a'` vs `'w'`).
-
-`'a'`:  the text will be inserted at the end of the file.
-
-`'w'`: the file will be emptied before the text will be inserted at the beginning.
-
-If you want to include a symbol such as a line break, into your string (to start from a new line),
-add it with a `+`:
-```python
-f.write('\n' + 'string,' + ' ' + 'another string')
-```
-This will add a new line and write `'string, another string'`.
-
-In the code editor, add all elements from the `zoo` list to "output.txt" so that the output is added from
-a new line and the elements are separated by `' and '`. Use the <code>' and '.join(lst)</code> syntax to 
-join the list elements into the required string. Afterwards, add `number` to the same output file.
-
-<div class='hint'>Use the <code>'a'</code> modifier to append lines at the end of the file.</div>
-<div class='hint'>Use the <code>write()</code> method.</div>
-<div class='hint'>Convert <code>number</code> into a string before writing.</div>
-<div class="hint">Add <code>\n</code> at the beginning of each string to write so that it eds up a separate line.</div>
-
-
-
-## What's next?
-
-Now, once you have mastered the basics of Python, we bet that you’re wondering what to do next. 
-We recommend checking out [JetBrains Academy](https://hi.hyperskill.org?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task). 
-Here are several reasons to try JetBrains Academy now:
-
-- At the moment, 37 Python projects and 348 topics are available for learning, and the number keeps growing.
-  Other programming languages, such as Kotlin and Java, are also available.
-- Projects of varying difficulty levels provide a flexible learning experience for all.
-- Comprehensive learning tracks are augmented with a detailed [Knowledge Map](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task).
-- Learn anywhere: you can start learning on your tablet or mobile phone via a browser and continue on your 
-  laptop or PC; you can even build the projects [right in your IDE](https://hyperskill.org/plugin#python?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task).
-
-Join JetBrains Academy [here](https://hyperskill.org/onboarding?track=python&utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) and try it yourself!
+## ファイルに書き込む :(Write to file)
+
+すでに述べたように、 `open()` の 2番目の引数として `'w'` を使用すると、ファイルは書き込み専用で開きます。
+新しい空のファイルが作成されます。
+
+同じ名前の別のファイルがすでに存在する場合、そのファイルは消去されます。
+既存のファイルにコンテンツを追加する場合は、 `'a'` (追加)修飾子を使用する必要があります。
+
+別のファイルオブジェクトメソッド `f.write(string)` は、 <i>string</i> の内容をファイルに書き込み、書き込まれた文字数を返します。
+
+```python
+f.write('This is a test\n')
+```
+```text
+15
+```
+テキストモードの他のタイプのオブジェクトは、最初に文字列に変換する必要があります:
+
+```python
+value = ('the answer', 42)
+s = str(value)  # convert the tuple into string
+f.write(s)
+```
+```python
+18
+```
+指定したテキストがファイルのどこに挿入されるかは、ファイルモードによって異なります (`'a'` と `'w'`) 。
+
+`'a'`:  テキストはファイルの最後に挿入されます。
+
+`'w'`: テキストが最初に挿入される前に、ファイルは空になります。
+
+改行などの記号を文字列に含める場合(新しい行から開始する場合)、「+」を付けて追加します:
+
+```python
+f.write('\n' + 'string,' + ' ' + 'another string')
+```
+
+これにより、新しい行が追加され、 `'文字列、別の文字列'`が書き込まれます。
+
+コードエディタで、`zoo` リストのすべての要素を "output.txt" に追加して、
+出力が新しい行から追加され、要素が `' and '` で区切られるようにします。
+ <code>' and '.join(lst)</code> 構文を使用して、リスト要素を必要な文字列に結合します。
+その後、同じ出力ファイルに `number` を追加します。
+
+<div class='hint'> <code>'a'</code> 修飾子を使用して、ファイルの最後に行を追加します。 </div>
+<div class='hint'> <code>write()</code> メソッドを使用します。</div>
+<div class='hint'>書き込む前に <code>number</code> を文字列に変換します。</div>
+<div class='hint'>各文字列の先頭に <code>\n</code> を追加して、別の行を編集するように書き込みます。</div>
+
+
+## 次は何ですか?
+
+さて、Python の基本をマスターしたら、次に何をすべきか疑問に思っていることでしょう。
+
+[JetBrains Academy](https://hi.hyperskill.org?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) をチェックすることをお勧めします。
+
+JetBrains Academy を今すぐ試す理由は次のとおりです:
+
+- 現在、37 のPython プロジェクトと348 のトピックが学習に利用可能であり、その数は増え続けています。
+Kotlin やJava などの他のプログラミング言語も学習に利用できます。
+
+- さまざまな難易度のプロジェクトは、すべての人に柔軟な学習体験を提供します。
+
+- 包括的な学習トラックは、詳細な[ナレッジマップ](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) で補強されています。
+
+- どこでも学習: ブラウザを介してタブレットまたは携帯電話で学習を開始し、ラップトップまたはPC で続行できます。 [IDE でプロジェクトをビルド](https://hyperskill.org/plugin#python?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) することもできます。
+
+JetBrains Academy の[ここ](https://hyperskill.org/onboarding?track=python&utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=last-task) に参加して、自分で試してみてください。
diff -Naur "a/Functions/Args and kwargs/task.md" "b/Functions/Args and kwargs/task.md"
--- "a/Functions/Args and kwargs/task.md"   2022-04-06 14:37:38.871008989 +0900
+++ "b/Functions/Args and kwargs/task.md"   2022-04-06 14:38:43.287949406 +0900
@@ -1,44 +1,49 @@
-## Args and kwargs
-
-When a final formal parameter of the form `**name` is present, it receives a dictionary 
-(see [Data Structures — Dictionaries ](course://Data structures/Dictionaries)) containing 
-all keyword arguments except for those corresponding 
-to a formal parameter. This may be combined with a formal parameter of the form `*name` which 
-receives a tuple containing any number of positional arguments beyond the formal parameter list 
-(`*name` must occur before `**name`). For example, if we define a function like the one in the 
-code editor, it could be called as shown in call 1, which would print:
-```text
--- Do you know how to get to the Library ?
--- I'm sorry, I am not from here, no idea about the Library
-Do you at least have a cigar, sir?
-Sure, help yourself.
-----------------------------------------
-lost_person : old banker
-other_guy : street clown
-scene : in a park
-```
-This function can be called with an arbitrary number of arguments. These arguments will be wrapped 
-up in a tuple (see [Tuples](course://Data structures/Tuples)). Before the variable number of arguments, zero or 
-more normal arguments may occur; in our case there's one – `place`. Any formal parameters that occur 
-after the `*args` parameter are ‘keyword-only’ arguments, meaning that they can only be used as keywords 
-rather than positional arguments. Another way to call this function is shown in call 2, and it will give 
-us the same output.
-
-### Task
-
-In the code editor, modify the code below the `cat()` function so that it prints 
-the following:
-```text
--- This cat would eat if you gave it anything
--- Lovely fur, the Maine Coon
--- It's fat !
-IT IS TOO FAT.
-YOU ARE FEEDING YOUR CAT TOO MUCH.
-```
-<div class="hint">Remember to unpack extra positional arguments with <code>*</code>.</div>
-
-<div class="hint">Remember to unpack keyword arguments with <code>**</code>.</div>
-
-<div class="hint">Do not forget to provide the value for the formal parameter <code>food</code>.</div>
-
-
+## Args と kwargs :(Args and kwargs)
+
+`**name` 形式の最後の正式なパラメータが存在する場合、仮パラメータに対応するものを除くすべてのキーワード引数を含む辞書([データ構造 — 辞書](course://Data structures/Dictionaries) を参照)を受け取ります。
+
+これは、形式パラメータリスト以外の任意の数の位置引数を含むタプルを受け取る形式 `*name` の形式パラメータと組み合わせることができます。(`*name` は `**name` の前に出現する必要があります)
+
+例えば、コードエディタで次のような関数を定義すると、
+「call 1」に示すように呼び出すことができ、次のように出力されます:
+
+```text
+-- Do you know how to get to the Library ?  ←(図書館への行き方は ?)
+-- I'm sorry, I am not from here, no idea about the Library ←(図書館はわかりません)
+Do you at least have a cigar, sir?  ←(葉巻はありますか?)
+Sure, help yourself.  ←(助けてください。)
+----------------------------------------
+lost_person : old banker  ←(失われた人 : 古い銀行家)
+other_guy : street clown  ←(他の男 : ストリートピエロ)
+scene : in a park  ←(シーン:公園で)
+```
+
+この関数は、任意の数の引数を使用して呼び出すことができます。
+
+これらの引数はタプルにまとめられます。([タプル](course://Data structures/Tuples) を参照)
+
+可変の引数の前に、0個以上の通常の引数が発生する可能性があります。
+私たちの場合、「場所」が 1つあります。
+
+ `*args` パラメータの後に発生する正式なパラメータはすべて「キーワードのみ」の引数です。つまり、位置引数ではなくキーワードとしてのみ使用できます。
+
+この関数を呼び出す別の方法を「call 2」に示します。これにより、同じ出力が得られます。
+
+### 課題
+
+コードエディタで、 `cat()` 関数の下のコードを変更して、
+次のように出力します:
+
+```text
+-- This cat would eat if you gave it anything ←(この猫は何かを食べるでしょう)
+-- Lovely fur, the Maine Coon  ←(素敵な毛皮、メインクーン)
+-- It's fat !  ←(太っている!)
+IT IS TOO FAT.  ←(太りすぎです。)
+YOU ARE FEEDING YOUR CAT TOO MUCH.  ←(猫に与えすぎ)
+```
+
+<div class='hint'> <code>*</code> を使用して余分な位置引数をアンパックすることを忘れないでください。</div>
+
+<div class='hint'> <code>**</code> を使用してキーワード引数を解凍することを忘れないでください。</div>
+
+<div class='hint'> 正式なパラメータ<code>food</code> の値を指定することを忘れないでください。</div>
diff -Naur "a/Functions/Default parameters/task.md" "b/Functions/Default parameters/task.md"
--- "a/Functions/Default parameters/task.md"    2022-04-06 14:37:38.863008872 +0900
+++ "b/Functions/Default parameters/task.md"    2022-04-06 14:38:43.283949348 +0900
@@ -1,26 +1,29 @@
-## Default parameters
-
-It is also possible to define functions with a variable number of arguments. There are 
-three forms, which can be combined. The most useful form is to specify a default value 
-for one or more arguments. This creates a function that can be called with fewer 
-arguments than it is defined with. For example, check out the first function in the code editor.
-This function can be called in several ways:
-
-- giving only the mandatory argument `a`: `multiply_by(3)`
-
-- giving one of the optional arguments: `multiply_by(3, 47)`, or `multiply_by(3, c=47)`
-
-- or even giving all arguments: `multiply_by(3, 47, 0)`
-
-You can specify which argument you are providing in the function call, just like we did in the third case
-with `c=47`. If you do not specify that, values will be assigned according to their order.
-Do not put spaces around the `=` symbol in function calls and definitions.
- 
-Explore this topic further by reading <a href="https://docs.python.org/3/tutorial/controlflow.html#default-argument-values">this section</a>
-of Python Documentation.
-
-
-### Task
-Add parameters to the `hello()` function and set a default value for the `name` parameter.  
-
-<div class='hint'>Specify any default value for the <code>name</code> parameter.</div>
+## デフォルトのパラメータ :(Default parameters)
+
+可変の引数で関数を定義することも可能です。
+
+組み合わせることができる 3つの形式があります。  
+最も便利な形式は、1つ以上の引数のデフォルト値を指定することです。
+
+これにより、定義されているよりも少ない引数で呼び出すことができる関数が作成されます。
+
+例えば、コードエディタの最初の関数を確認してください。
+
+この関数は、いくつかの方法で呼び出すことができます。
+
+- 必須の引数 `a` のみを与える: `multiply_by(3)`
+- オプションの引数の 1つを与える: `multiply_by(3, 47)`、または `multiply_by(3, c=47)`
+- またはすべての議論を与える: `multiply_by(3, 47, 0)`
+
+`c=47` の 3番目のケースで行ったように、関数呼び出しで提供する引数を指定できます。
+
+これを指定しない場合、値は順序に従って割り当てられます。
+
+関数呼び出しと定義では、`=` 記号の前後にスペースを入れないでください。
+
+このトピックについて詳しくは、Pythonドキュメントの <a href="https://docs.python.org/3/tutorial/controlflow.html#default-argument-values">このセクション</a> をご覧ください。
+
+### 課題
+`hello()` 関数にパラメータを追加し、`name` パラメータのデフォルト値を設定します。
+
+<div class='hint'> <code>name</code> パラメータのデフォルト値を指定します。</div>
diff -Naur a/Functions/Definition/task.md b/Functions/Definition/task.md
--- a/Functions/Definition/task.md  2022-04-06 14:37:38.847008638 +0900
+++ b/Functions/Definition/task.md  2022-04-06 14:38:43.271949173 +0900
@@ -1,25 +1,33 @@
-## Definition
-
-Functions are a convenient way to divide your code into useful blocks, make it more 
-readable, and reuse it.
-The keyword `def` introduces a function definition. 
-It must be followed by the function name and the parenthesized list of formal parameters (which can be empty). 
-The statements that form the body of the function start at the next line and must be indented.
-
-
-Functions only run when they are called. To call a function, use its name followed by parentheses:
-
-```python
-def my_function():  # function definition
-  print("Hello from a function")
-
-my_function()  # function call
-```
-
-Read more about defining functions in <a href="https://docs.python.org/3/tutorial/controlflow.html#defining-functions">this section</a> of Python Documentation.
-### Task
- - Call the function `my_function` inside the loop to repeat its invocation 5 times
- - Define a function that can replace the duplicated `print` statements in the file.  
-
-<div class='hint'>Use the <code>()</code> to call the <code>my_function</code> function.</div>
-<div class='hint'>Use the <code>def</code> keyword to define the <code>fun</code> function.</div>
+## 意味 :(Definition)
+
+関数は、コードを有用なブロックに分割し、より多くのものにするための便利な方法です。
+
+読み取り可能で、再利用できます。
+
+キーワード `def` は関数定義を導入します。
+
+その後に、関数名と仮パラメーターの括弧で囲まれたリスト(空の場合もあります)を続ける必要があります。
+
+関数の本体を形成するステートメントは次の行から始まり、インデントする必要があります。
+
+関数は、呼び出されたときにのみ実行されます。
+
+関数を呼び出すには、名前の後に括弧を付けて使用します:
+
+```python
+def my_function():  # function definition
+  print("Hello from a function")
+
+my_function()  # function call
+```
+
+関数の定義について詳しくは、Pythonドキュメントの <a href="https://docs.python.org/3/tutorial/controlflow.html#defining-functions">このセクション</a> をご覧ください。
+
+### 課題
+
+- ループ内で関数 `my_function` を呼び出して、その呼び出しを 5回繰り返します  
+- ファイル内の重複した `print` ステートメントを置き換えることができる関数を定義します。
+
+<div class='hint'> <code>()</code> を使用して <code>my_function</code> 関数を呼び出します。</div>
+
+<div class='hint'>Use the <code>def</code> キーワードを使用して、<code>fun</code> 関数を定義します。</div>
diff -Naur "a/Functions/Keyword Arguments/task.md" "b/Functions/Keyword Arguments/task.md"
--- "a/Functions/Keyword Arguments/task.md" 2022-04-06 14:37:38.863008872 +0900
+++ "b/Functions/Keyword Arguments/task.md" 2022-04-06 14:38:43.287949406 +0900
@@ -1,38 +1,48 @@
-## Keyword Arguments
-
-We already hinted that functions can also be called using keyword arguments of the form `kwarg=value`. For 
-instance, the function `cat()`, which we defined for you,
-accepts one required argument (`food`) and three optional arguments (`state`, `action`, and `breed`). 
-It can be called in any of the following ways (you can try them all out):
-
-```python
-cat('chicken')                     # 1 positional argument
-cat(food='chicken')                # 1 keyword argument
-cat(food='fish', action='bite')    # 2 keyword arguments
-cat(action='bite', food='fish')    # 2 keyword arguments
-cat('beef', 'happy', 'hiss')       # 3 positional arguments
-cat('a hug', state='purrring')     # 1 positional, 1 keyword
-```
-In a function call, keyword arguments must follow positional arguments. All the keyword 
-arguments passed must match one of the arguments accepted by the function (e.g., `book` is not a valid 
-argument for the `cat` function), and their order is not important. This also includes non-optional 
-arguments (e.g., `cat(food='fish')` is valid too). No argument may receive a value more than once.
-All the following calls would be invalid:
-
-```python
-cat()                              # required argument missing
-cat(food='fish', 'dead')           # positional argument after a keyword argument
-cat('veggies', food='nothing')     # duplicate value for the same argument
-cat(actor='Johnny Depp')           # unknown keyword argument
-```
-
-### Task
-In the editor, complete the function call  with arguments so that it prints the following:
-```text
--- This cat wouldn't growl if you gave it soup
--- Lovely fur, the Sphinx
--- It's still hungry!
-```
-
-<div class="hint">For keyword arguments, use syntax such as <code>state='asleep'</code>.</div>
-<div class="hint">The required argument <code>food</code> has to be in the first position, unless you supply it as a keyword argument.</div>
\ ファイル末尾に改行がありません
+## キーワード引数 :(Keyword Arguments)
+
+関数は `kwarg=value` の形式のキーワード引数を使用して呼び出すこともできることをすでに示唆しました。
+
+例えば、私たちが定義した関数 `cat()` は、1つの必須引数(`food`)と 3つのオプションの引数(`state`、 `action`、および `breed`)を受け入れます。
+
+次のいずれかの方法で呼び出すことができます(すべて試してみることができます):
+
+```python
+cat('chicken')                     # 1 位置引数
+cat(food='chicken')                # 1 キーワード引数
+cat(food='fish', action='bite')    # 2 キーワード引数
+cat(action='bite', food='fish')    # 2 キーワード引数
+cat('beef', 'happy', 'hiss')       # 3 位置引数
+cat('a hug', state='purrring')     # 1 位置引数、1 キーワード引数
+```
+
+関数呼び出しでは、キーワード引数は位置引数の後に続く必要があります。
+
+渡されるすべてのキーワード引数は、関数によって受け入れられる引数の 1つと一致する必要があり(例えば、`book` は `cat` 関数の有効な引数ではありません)、それらの順序は重要ではありません。
+
+これには、オプションではない引数も含まれます。(例えば、`cat(food='fish')` も有効です)。
+
+引数が値を複数回受け取ることはできません。
+
+次のすべての呼び出しは無効になります:
+
+```python
+cat()                              # 必要な引数がありません
+cat(food='fish', 'dead')           # キーワード引数の後の位置引数
+cat('veggies', food='nothing')     # 同じ引数の値が重複しています
+cat(actor='Johnny Depp')           # 不明なキーワード引数
+```
+
+### 課題
+
+エディタで、引数を指定して関数呼び出しを行い、次のように出力します:
+
+```text
+-- This cat wouldn't growl if you gave it soup
+-- Lovely fur, the Sphinx
+-- It's still hungry!
+```
+
+<div class='hint'>キーワード引数には、<code>state='asleep'</code> などの構文を使用します。</div>
+
+<div class='hint'>キーワード引数として指定しない限り、必須の引数 <code>food</code> は最初の位置にある必要があります。</div>
+
diff -Naur "a/Functions/Parameters and call arguments/task.md" "b/Functions/Parameters and call arguments/task.md"
--- "a/Functions/Parameters and call arguments/task.md" 2022-04-06 14:37:38.851008697 +0900
+++ "b/Functions/Parameters and call arguments/task.md" 2022-04-06 14:38:43.275949231 +0900
@@ -1,41 +1,45 @@
-## Parameters and call arguments
-
-Function parameters are defined inside the parentheses `()` following the 
-function name. A parameter acts as a variable name for an argument passed to the
-function. 
-
-The terms parameter and argument refer to the same thing: information 
-that is passed into a function. However, a parameter is the variable listed 
-inside the parentheses in the function definition, while an argument is the 
-value that is sent to the function when it is called.
-
-By default, a function must be called with the correct number of arguments. 
-If your function expects 2 arguments, you have to call it 
-with 2 arguments:
-
-```python
-def my_function(name, surname):
-    print(name + " " + surname)
-
-my_function("Jon", "Snow")
-```
-Result:
-```text
-Jon Snow
-```
-However, if you supply it with just one argument during the call:
-```python
-my_function("Sam")
-```
-`TypeError` will be raised:
-```text
-TypeError                                 Traceback (most recent call last)
-<ipython-input-29-40eb74e4b26a> in <module>
-----> 1 my_function('Jon')
-
-TypeError: my_function() missing 1 required positional argument: 'surname'
-```
-### Task
-In the code editor, define a function that prints the square of a passed parameter.  
-
-<div class='hint'>Add the <code>x</code> parameter inside parentheses in the function definition.</div>
+## パラメータと呼び出し引数 :(Parameters and call arguments)
+
+「関数パラメータ」は、関数名に続く括弧 `()` 内で定義されます。
+
+「パラメータ」は、関数に渡される引数の変数名として機能します。
+
+「パラメータ」と「引数」という用語は同じものを指します。つまり、関数に渡される情報です。
+
+ただし、「パラメータ」は関数定義の括弧内にリストされている「変数」であり、「引数」は関数が呼び出されたときに関数に送信される「値」です。
+
+デフォルトでは、関数は正しい数の引数を使用して呼び出す必要があります。
+
+関数が 2つの引数を予期している場合は、2つの引数を使用して呼び出す必要があります:
+
+```python
+def my_function(name, surname):
+    print(name + " " + surname)
+
+my_function("Jon", "Snow")
+```
+
+結果:
+```text
+Jon Snow
+```
+
+ただし、呼び出し中に引数を 1つだけ指定すると、次のようになります:
+
+```python
+my_function("Sam")
+```
+
+`TypeError`が発生します:
+```text
+TypeError                                 Traceback (most recent call last)
+<ipython-input-29-40eb74e4b26a> in <module>
+----> 1 my_function('Jon')
+
+TypeError: my_function() missing 1 required positional argument: 'surname'
+```
+
+### 課題
+コードエディタで、渡されたパラメータの 2乗を出力する関数を定義します。
+
+<div class='hint'>関数定義の括弧内に <code>x</code> パラメーターを追加します。</div>
diff -Naur a/Functions/Recursion/task.md b/Functions/Recursion/task.md
--- a/Functions/Recursion/task.md   2022-04-06 14:37:38.875009048 +0900
+++ b/Functions/Recursion/task.md   2022-04-06 14:38:43.295949523 +0900
@@ -1,64 +1,70 @@
-## Recursion
-
-The word <b>recursion</b> comes from the Latin word <i>recurrere</i>, meaning to return, revert, or recur.
-In programming, recursion refers to a coding technique in which a function calls itself.
-
-In most cases, recursion isn't necessary, but in some situations, self-referential
-definition is warranted. Walking through tree-like data structures would be a good example.
-Such structures are nested, and they readily fit a recursive definition. A non-recursive
-algorithm for the same task would be quite cumbersome.  
-
-Here's a simple example of a recursive function. It takes a number as an argument 
-and prints the numbers from the specified argument down to zero. In the recursive call, 
-the argument is one less than the current value of `n`, so each recursion moves closer 
-to the base case (which is zero).
-
-```python
-def countdown(n):
-    print(n, end=' ')
-    if n == 0:
-        return             # Terminates recursion
-    else:
-        countdown(n - 1)   # Recursive call
-
-
-countdown(4)
-```
-```text
-10 9 8 7 6 5 4 3 2 1 0 
-```
-
-<div class="hint">This function doesn’t check its argument for validity: if <code>n</code> 
-is either a non-integer or negative, you’ll get a <code>RecursionError</code> exception because the base case is never reached:
-
-```python
-countdown(-10)
-```
-```text
-RecursionError: maximum recursion depth exceeded while calling a Python object
-```
-You can find out what Python’s recursion limit is with a function from the sys module 
-called `getrecursionlimit()`, and you can change it with `setrecursionlimit()`:
-
-```python
-from sys import setrecursionlimit
-setrecursionlimit(3000)
-getrecursionlimit()
-```
-```text
-3000
-```
-</div>
-
-Keep in mind that recursion isn’t useful in every situation. For some problems, a recursive solution, although 
-possible, will be awkward rather than elegant. Recursive implementations often consume more 
-memory than non-recursive ones and in some cases may result in slower execution.
-
-### Task
-In the code editor, implement a recursive function that calculates the [factorial](https://en.wikipedia.org/wiki/Factorial) of a positive integer.
-For 1 and 0 it returns 1, for every other number it calculates the product of this number (`n`) and
-the factorial of the previous number (`n-1`).
-
-<div class="hint">Do not forget about the recursive function call.</div>
-
-
+## 再帰 :(Recursion)
+
+<b>recursion</b> という単語は、ラテン語の <i>recurrere</i> に由来します。  
+これは、戻る、元に戻す、または繰り返すことを意味します。
+
+プログラミングでは、再帰とは、関数がそれ自体を呼び出すコーディング手法を指します。
+
+ほとんどの場合、再帰は必要ありませんが、状況によっては、自己参照の定義が必要です。
+
+ツリーのようなデータ構造を使うことは良い例です。
+このような構造はネストされており、再帰的定義に容易に適合します。
+
+同じ課題の非再帰的アルゴリズムは非常に面倒です。
+
+これは再帰関数の簡単な例です。
+
+引数として数値を取り、指定された引数からゼロまでの数値を出力します。
+
+再帰呼び出しでは、引数は現在の `n` の値より1小さいため、各再帰は基本ケース(ゼロ)に近づきます。
+
+```python
+def countdown(n):
+    print(n, end=' ')
+    if n == 0:
+        return             # 再帰を終了
+    else:
+        countdown(n - 1)   # 再帰呼び出し
+
+
+countdown(4)
+```
+```text
+10 9 8 7 6 5 4 3 2 1 0 
+```
+
+<div class='hint'>この関数は引数の妥当性をチェックしません。<code>n</code> 
+が非整数または負の場合、 <code>RecursionError</code> が発生します。
+
+基本ケースに到達しないための例外:
+
+```python
+countdown(-10)
+```
+```text
+RecursionError: maximum recursion depth exceeded while calling a Python object
+```
+sys モジュールの関数を使用して、Python の再帰制限を確認できます。  
+`getrecursionlimit()` と呼ばれ、 `setrecursionlimit()` で変更できます:
+
+```python
+from sys import setrecursionlimit
+setrecursionlimit(3000)
+getrecursionlimit()
+```
+```text
+3000
+```
+</div>
+
+再帰はすべての状況で役立つわけではないことに注意してください。  
+一部の問題では、再帰的な解決策は可能ですが、エレガントというよりは厄介です。
+
+再帰的な実装は、非再帰的な実装よりも多くのメモリを消費することが多く、場合によっては実行が遅くなる可能性があります。
+
+### 課題
+コードエディタで、正の整数の[階乗](https://en.wikipedia.org/wiki/Factorial) を計算する再帰関数を実装します。
+
+1 と 0 の場合は 1 を返し、1つおきの数値については、この数値 (`n`) と前の数値の階乗 (`n-1`) の積を計算します。
+
+<div class='hint'>再帰関数呼び出しを忘れないでください。</div>
diff -Naur "a/Functions/Return value/task.md" "b/Functions/Return value/task.md"
--- "a/Functions/Return value/task.md"  2022-04-06 14:37:38.859008814 +0900
+++ "b/Functions/Return value/task.md"  2022-04-06 14:38:43.279949289 +0900
@@ -1,25 +1,25 @@
-## Return value
-
-Functions may return a value to the caller, using the keyword `return` . You can use the 
-returned value to assign it to a variable or just print it out. In fact, even functions 
-without a `return` statement do return a value. This value is 
-called `None` (it’s a built-in name). Writing the value `None` is normally suppressed by 
-the interpreter, but if you really want to see it, you can use `print(some_func())`.
-
-><i>The first statement of the function body can optionally be a string literal; this string 
-literal is the function’s documentation string, or docstring (more about docstrings can 
-be found in the section <a href="https://docs.python.org/3/tutorial/controlflow.html#tut-docstrings">Documentation Strings</a>
-in Python Documentation). It’s good practice to include docstrings in the code that you write.</i>
-  
-In the Fibonacci sequence, the first two numbers are `1` and `1`, and each subsequent 
-number is the sum of the previous two. 
-
-### Task
-Write a function that returns a list of numbers 
-of the Fibonacci sequence up to `n` .  
-
-<div class='hint'>Initialize <code>b</code> with 1.</div>
-<div class='hint'>Update <code>b</code> with <code>a + b</code>.</div>
-<div class='hint'>Update <code>a</code> with <code>tmp_var</code>.</div>
-
-
+## 戻り値 :(Return value)
+
+関数は、キーワード `return` を使用して、呼び出し元に値を返す場合があります。
+戻り値を使用して変数に割り当てるか、単に出力することができます。
+
+実際、`return` ステートメントのない関数でも値を返します。
+
+この値は `None`(なし)と呼ばれます(組み込みの名前です)。
+
+値 `None` の書き込みは通常、インタープリタによって抑制されますが、
+本当に見たい場合は、 `print(some_func())` を使用できます。
+
+><i>関数本体の最初のステートメントは、オプションで文字列リテラルにすることができます。この文字列リテラルは、関数のドキュメント文字列または docstring です。  
+( docstring の詳細については、Pythonドキュメントの  <a href="https://docs.python.org/3/tutorial/controlflow.html#tut-docstrings">ドキュメント文字列</a> をご覧ください。)  
+作成するコードに docstring を含めることをお勧めします。</i>
+
+「フィボナッチ数列」では、最初の 2つの数字は `1` と `1` であり、その後はそれぞれ
+数値は前の 2つの合計です。
+
+### 課題
+`n` までの「フィボナッチ数列」の数のリストを返す関数を記述します。
+
+<div class='hint'> <code>b</code> を 1で初期化します。</div>
+<div class='hint'> <code>b</code> を <code>a + b</code>で更新します。</div>
+<div class='hint'> <code>a</code> を <code>tmp_var</code>で更新します。</div>
diff -Naur a/Introduction/About/task.md b/Introduction/About/task.md
--- a/Introduction/About/task.md    2022-04-06 14:37:38.879009106 +0900
+++ b/Introduction/About/task.md    2022-04-06 14:38:43.299949581 +0900
@@ -1,29 +1,29 @@
-## About the Course
-
-Welcome to the course in basics of Python programming!
-
-#### Why Learn Python?
-Python is one of the most popular programming languages in the world.
-Used extensively in data science, ML, and AI, Python is the fastest growing major programming language.
-
-It is a perfect starting point for getting acquainted with programming.
-Python is easier to read, write, and learn than most other programming languages.
-With Python, you won’t get stuck on a simple beginner’s task.
-Numerous Python forums and Q&A platforms, as well as a supportive open-source community are invaluable resources to help you stay motivated as you learn.
-
-#### Course Aims
-
-After completing this course, you should be able to:
-
-- understand and make use of basic programming concepts, such as variables, data structures, functions, and classes;
-- read Python code;
-- write simple programs in Python;
-- work with Python modules and packages;
-- continue learning Python with other courses, offering more complex material.
-
-#### Prerequisites
-
-You don't need to have any previous experience in Python or programming in general 
-to complete this course.
-
-Good luck!
+## コースについて
+
+Python プログラミングの基礎のコースへようこそ!
+
+#### なぜ Python を学ぶのですか?
+
+Python は、世界で最も人気のあるプログラミング言語の1つです。
+Pythonは、データサイエンス、ML、AI で広く使用されており、最も急速に成長している主要なプログラミング言語です。
+ 
+これは、プログラミングに精通するための完璧な出発点です。
+Python は、他のほとんどのプログラミング言語よりも読み取り、書き込み、学習が簡単です。
+Python を使用すると、単純な初心者の課題にとらわれることはありません。
+多数の Python フォーラムと Q&A プラットフォーム、およびサポートを提供するオープンソースコミュニティは、学習意欲を維持するのに役立つ貴重なリソースです。
+
+#### コースの目的
+
+このコースを完了すると、次のことができるようになります。
+
+- 変数、データ構造、関数、クラスなどの基本的なプログラミングの概念を理解して利用できます。
+- Python コードを読めます。
+- Python で簡単なプログラムを作成できます。
+- Python モジュールおよびパッケージを操作できます。
+- 他のコースでPython を学び続け、より複雑な資料を提供します。
+
+#### 前提条件
+
+このコースを完了するために、Python やプログラミング全般の経験は必要ありません。
+
+頑張って!
diff -Naur a/Introduction/Comments/task.md b/Introduction/Comments/task.md
--- a/Introduction/Comments/task.md 2022-04-06 14:37:38.911009574 +0900
+++ b/Introduction/Comments/task.md 2022-04-06 14:38:43.335950106 +0900
@@ -1,39 +1,40 @@
-## Comments
-
-Comments in Python start with the hash character (`#`) and a single space, 
-and they extend to the end of the physical line. You can use &shortcut:CommentByLineComment; to comment 
-or uncomment the whole line or a block of code in PyCharm.  
-
-
-Always make a priority of keeping the comments up-to-date when the code changes!
-Comments that contradict the code are worse than no comments.
-Also, they are unnecessary and in fact quite distracting if they state the obvious. Don't do this:
-
-```python
-x = x + 1                 # Increment x
-```
-
-Comments should be complete sentences. The first word should be capitalized, 
-unless it is an identifier that begins with a lower case letter. Ensure that 
-your comments are clear and easily understandable to other people. 
-
-#### Block Comments
-
-Block comments generally apply to some (or all) code that follows them, and 
-are indented to the same level as that code. 
-
-#### Inline Comments
-Use inline comments sparingly. An inline comment is a comment on the 
-same line as a statement. Inline comments should be separated by at least two spaces from the statement.
-
-You can read more about proper commenting in <a href="https://www.python.org/dev/peps/pep-0008/#comments">PEP 8 – Style Guide for Python Code</a>. 
-  
-You can also comment a line or a block of code if you don't want to delete it it's not needed it at the moment. 
-
-### Task
-In the code editor, comment the line with the `print` statement that says it should not be printed. 
-See how the code is not highlighted anymore.
-
-<div class="hint">
-  Add a <code>#</code> and a space before that <code>print</code> statement. Leave everything else as is.
-</div>
+## コメント :(Comments)
+
+Python のコメントは、ハッシュ文字 (`#`) と単一のスペースで始まり、物理行の終わりまで続きます。
+
+ &shortcut:CommentByLineComment; を使うと、
+PyCharm の行全体またはコードブロックのコメントまたはコメント解除ができます。
+
+コードを変更したときは、常にコメントを最新の状態に保つことを優先してください。
+
+コードと矛盾するコメントは、コメントがない場合よりも悪いことです。
+また、不必要ですが、明白なことを述べている場合、実際にはかなり気が散ります。
+
+なので、これを行わないでください:
+
+```python
+x = x + 1                 # Increment x
+```
+コメントは完全な文章である必要があります。最初の単語は、小文字で始まる識別子でない限り、大文字にする必要があります。コメントが明確で、他の人にもわかりやすいものであることを確認してください。
+
+#### ブロックコメント :(Block Comments)
+
+ブロックコメントは通常、それに続く一部(またはすべて)のコードに適用され、そのコードと同じレベルにインデントされます。
+
+#### インラインコメント :(Inline Comments)
+
+インラインコメントは慎重に使用してください。
+インラインコメントは、ステートメントと同じ行のコメントです。
+インラインコメントは、ステートメントから少なくとも 2つのスペースで区切る必要があります。
+
+適切なコメントの詳細については、<a href="https://www.python.org/dev/peps/pep-0008/#comments">PEP 8 – Style Guide for Python Code</a> を参照してください。
+
+削除したくない場合は、コードの 1行またはブロックにコメントを付けることもできます。現時点では必要ありません。
+
+### 課題
+コードエディタで、出力しないことを示す `print` ステートメントで、行にコメントを付けます。
+コードが強調表示されなくなった様子を確認ください。
+
+<div class='hint'>
+  <code>#</code> とその <code>print</code> ステートメントの前にスペースを追加します。他はすべてそのままにしておきます。
+</div>
diff -Naur "a/Introduction/Course View/task.md" "b/Introduction/Course View/task.md"
--- "a/Introduction/Course View/task.md"    2022-04-06 14:37:38.887009223 +0900
+++ "b/Introduction/Course View/task.md"    2022-04-06 14:38:43.311949756 +0900
@@ -1,18 +1,21 @@
-## Course View
-
-<b>Course View</b> shows you the course syllabus: a list of lessons with tasks.
-
-<style>
-img {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-</style>
-<img src="edu_course_view.png" class="center" width="75%"/>
-
-You can navigate to any task by double-clicking its name.
-
-To hide the Course View window, click the Project Tool Window button or press <span style="color: #509DD6">&shortcut:ActivateProjectToolWindow;</span>. This will give you more space for the Editor and Task Description windows.
-
-To show the hidden Course View window, click the Project Tool Window button (or press <span style="color: #509DD6">&shortcut:ActivateProjectToolWindow;</span>) again.
+## コースの表示 :(Course View)
+
+<b>「コースの表示」</b> (Course) ウィンドウには、コースの項目が表示されます: 課題を含むレッスンの一覧です:
+
+<style>
+img {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+</style>
+<img src="edu_course_view.png" class="center" width="30%"/>
+
+名前をダブルクリックすると、任意の課題に移動できます。
+
+「コースの表示」ウィンドウを非表示にするには、「プロジェクトツール」のウィンドウ ボタンをクリックするか、 <span style="color: #509DD6">&shortcut:ActivateProjectToolWindow;</span> を押します。
+
+これにより、「編集エリア」ウィンドウと「課題の説明」ウィンドウ用のスペースが増えます。
+
+非表示の「コースの表示」ウィンドウを表示するには、[プロジェクトツールウィンドウ]ボタンをクリックします。または、<span style="color: #509DD6">&shortcut:ActivateProjectToolWindow;</span> を再び押します。
+
diff -Naur a/Introduction/Editor/task.md b/Introduction/Editor/task.md
--- a/Introduction/Editor/task.md   2022-04-06 14:37:38.895009340 +0900
+++ b/Introduction/Editor/task.md   2022-04-06 14:38:43.315949814 +0900
@@ -1,22 +1,24 @@
-## Editor
-
-The <b>Editor</b> is your playground where you will be programming. You can experiment here while you work on theoretical tasks and quizzes without being checked.
-
-For programming assignments, the Editor is where you’ll fix the existing code or write your own code from scratch. This code will be checked.
-
-<style>
-img {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-</style>
-<img src="edu_editor.png" class="center" width="100%"/>
-
-
-To run your code at any time, choose the Run option from the context menu or press <span style="color: #509DD6">&shortcut:Run;</span>:
-
-<img src="edu_context_menu_run.png" class="center" width="100%"/>
-
-
-If you want to go back to the Editor and focus on your code, the fastest way to do it is with the Hide All Windows command (<span style="color: #509DD6">&shortcut:HideAllWindows;</span>). To get all the windows back, repeat the command.
\ ファイル末尾に改行がありません
+## 編集エリア :(Editor)
+
+<b>「編集エリア」</b> (Editor) は、プログラミングを行うための遊び場です。チェックせずに理論的な課題やクイズに取り組んでいる間、ここで実験することができます。
+
+プログラミングの割り当ての場合、「編集エリア」は既存のコードを修正するか、独自のコードを最初から作成する場所です。このコードがチェックされます。
+
+<style>
+img {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+</style>
+<img src="edu_editor.png" class="center" width="60%"/>
+
+コードをいつでも実行するには、コンテキストメニューから[実行]オプションを選択するか、<span style="color: #509DD6">&shortcut:Run;</span> を押します:
+
+<img src="edu_context_menu_run.png" class="center" width="60%"/>
+
+
+「編集エリア」に戻ってコードに集中したい場合に、最も速いやり方は、[すべてのウィンドウを非表示]コマンド
+ (<span style="color: #509DD6">&shortcut:HideAllWindows;</span>) を使うことです。
+すべてのウィンドウを元に戻すには、コマンドを繰り返します。
+
diff -Naur "a/Introduction/Navigating Around/task.md" "b/Introduction/Navigating Around/task.md"
--- "a/Introduction/Navigating Around/task.md"  2022-04-06 14:37:38.883009165 +0900
+++ "b/Introduction/Navigating Around/task.md"  2022-04-06 14:38:43.303949639 +0900
@@ -1,18 +1,25 @@
-## EduTools plugin overview
-
-This lesson will help you take your first steps with the [EduTools plugin](https://www.jetbrains.com/help/education/educational-products.html) and use it to learn Python.
-
-With the EduTools plugin, you can learn programming languages and tools by completing coding tasks and get instant feedback right inside the IDE.
-
-Enough talking – let's get started!
-
-If you're already familiar with the interface, you can skip this lesson.
-
-### Working with courses
-Every course available in EduTools is structured as a list of lessons. Lessons, in turn, can be grouped into sections. Each lesson contains several tasks.
-
-When you open a course, you will see the main tool windows used for navigation: <b>Course View</b>, <b>Editor</b>, and <b>Task Description</b>:
-
-<img src="edu_course_overview.png" width="100%"/>
-
-Click the "Next" button to navigate to the next task.
\ ファイル末尾に改行がありません
+## EduToolsプラグインの概要 :( EduTools plugin overview)
+
+このレッスンは、[EduTools プラグイン](https://www.jetbrains.com/help/education/educational-products.html) を使用して最初のステップを実行し、それを使用してPython を学習するのに役立ちます。
+
+EduTools プラグインを使用すると、コーディングタスクを完了してプログラミング言語とツールを学習し、IDE 内で即座にフィードバックを得ることができます。
+
+十分に話しましょう – 始めましょう!
+
+インターフェースに既に精通している場合は、このレッスンをスキップできます。
+
+### コースでの作業
+EduTools で利用できるすべてのコースは、レッスンのリストとして構成されています。
+次に、レッスンをセクションにグループ化できます。
+各レッスンにはいくつかの課題が含まれています。
+
+コースを開くと、ナビゲーションに使用されるメインのツールウィンドウが表示されます:
+
+<b>「コースの表示」</b>ウィンドウ  
+<b>「編集エリア」</b>ウィンドウ  
+<b>「課題の説明」</b>ウィンドウ
+
+<img src="edu_course_overview.png" width="100%"/>
+
+「Next」(次へ)ボタンをクリックして、次の課題に移動します。
+
diff -Naur "a/Introduction/Our first program/task.md" "b/Introduction/Our first program/task.md"
--- "a/Introduction/Our first program/task.md"  2022-04-06 14:37:38.907009516 +0900
+++ "b/Introduction/Our first program/task.md"  2022-04-06 14:38:43.331950047 +0900
@@ -1,23 +1,29 @@
-## Our first program
-
-Traditionally, the first program you write in any programming language is `"Hello World!"`.  
-  
-Introduce yourself to the World.  
-  
-To run this script, right-click anywhere in the **Editor** view so you can see the context menu and select **Run 'hello_world'**.   
-Alternatively, you can use the &shortcut:RunClass; shortcut.
-Exclusively in PyCharm Edu, you can use the ![](execute.svg) gutter icon. 
-
-For more information, check out [our help](https://www.jetbrains.com/help/pycharm/running-and-rerunning-applications.html).
-
-## JetBrains Academy
-
-If this task seems too hard or you are looking for a more structured and detailed curriculum, we suggest trying [JetBrains Academy](https://hi.hyperskill.org?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task).
-
-There are many reasons for you to try JetBrains Academy. Here are just a few of them:
-
-- Comprehensive learning tracks with a detailed [Knowledge Map](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task).
-- Projects with different difficulty levels that provide a flexible learning experience to match your skill level. 
-- You can practice with and master [professional development tools](https://hyperskill.org/plugin?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task).
-
-Join JetBrains Academy [here](https://hyperskill.org/onboarding?track=python&utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) and try it yourself.
+## 私たちの最初のプログラム :(Our first program)
+
+従来、プログラミング言語で最初に作成するプログラムは `"Hello World!"` です。
+
+こちらでも紹介します。
+
+このスクリプトを実行するには、 **Editor** ビュー(編集画面)の任意の場所を「右クリック」して、
+コンテキストメニューを表示し、**実行 'hello_world'** を選択します。
+
+または、&shortcut:RunClass; ショートカットを使用することもできます。
+PyCharm Edu でのみ、![](execute.svg) 男の子アイコンを使用できます。
+
+詳細については、[私たちのヘルプ](https://www.jetbrains.com/help/pycharm/running-and-rerunning-applications.html) をご覧ください。
+
+## JetBrains アカデミー :(JetBrains Academy)
+
+この課題が難しすぎると思われる場合、または、より構造化された詳細なカリキュラムを探している場合は、
+ [JetBrains Academy](https://hi.hyperskill.org?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) を試してみることをお勧めします。
+
+JetBrains Academy を試す理由はたくさんあります。それらのほんの一部を次に示します:
+
+- 詳細な[ナレッジマップ](https://hyperskill.org/knowledge-map?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) を含む包括的な学習トラック。
+
+- スキルレベルに合わせて柔軟な学習体験を提供する、さまざまな難易度のプロジェクト。
+
+- [専門能力開発ツール](https://hyperskill.org/plugin?utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) を使用して練習し、習得することができます。
+
+Join JetBrains Academy の [こちら](https://hyperskill.org/onboarding?track=python&utm_source=ide&utm_medium=ide&utm_campaign=ide&utm_content=first-task) に参加して、自分で試してみてください。
+
diff -Naur "a/Introduction/Task Description/task.md" "b/Introduction/Task Description/task.md"
--- "a/Introduction/Task Description/task.md"   2022-04-06 14:37:38.903009457 +0900
+++ "b/Introduction/Task Description/task.md"   2022-04-06 14:38:43.327949989 +0900
@@ -1,41 +1,46 @@
-## Task Description
-
-The **Task Description** window gives you all the information you need to complete a task:
-
-For theoretical tasks, the description provides learning and reading materials.
-For quizzes, it offers multiple choice questions.
-For programming assignments, it states the problem to be solved.
-
-Use Task Description icons for the following actions:
-
-| Icon                               | Description                   |
-|------------------------------------|-------------------------------|
-|**Check**                           | <font size="-1">Check the correctness of your answer (for a quiz) or your code solution (for a programming task)</font>|   
-| **Run**                            | <font size="-1">Run your code (for a theoretical tasks)</font>|
-|![](images/back.svg)                | <font size="-1">Go to the previous task</font>       |    
-|![](images/forward.svg) &nbsp;<font size="-1">or</font> **Next** | <font size="-1">Go to the next task</font>| 
-|![](images/reset.svg)               | <font size="-1">Discard all the changes you’ve made in the task, and start over</font>| 
-|![](images/commentTask.svg)         | <font size="-1">View the task page on Stepik and leave a comment</font>| 
-|<a>Peek Solution...</a>             | <font size="-1">Reveal the correct answer and show the <b>diff</b></font>|
-
-We recommend keeping the Task Description window visible and not hiding it completely. If it is too distracting, you can hide it by clicking the ![](images/hideToolWindow.svg) button in the top right-hand corner of the Task Description window.
-
-If you use two monitors, it may be helpful to switch the Task Description panel to the floating mode and move it to the second monitor, or just place it near the main IDE window. To do this, click the tool window settings ![](images/gear.svg) icon :
-
-<img src="images/edu_task_description_window_settings.png" width="85%"/>
-
-<style>
-img {
-  display: inline !important;
-}
-table, th, td {
-  border: 1px solid black;
-  border-collapse: collapse;
-}
-th, td {
-  padding: 5px;
-}
-table td:nth-child(1) {
-    text-align: center;
-}
-</style>
\ ファイル末尾に改行がありません
+## 課題の説明 :(Task Description)
+
+**課題の説明** (Description) ウィンドウには、課題を完了するために必要なすべての情報が表示されます。
+
+理論的な課題の場合、説明は学習および読み物を提供します。  
+クイズの場合、それは複数の選択肢の質問を提供します。  
+プログラミングの割り当てについては、解決すべき問題が記載されています。
+
+次のアクションには、「課題の説明」ウィンドウのアイコンを使用します:
+
+|アイコン       |説明        |  
+| ------------------------------------ | ------------------------------- |  
+|**チェック**            | <font size="-1">クイズの回答 またはプログラム課題のコードが正しいか確認</font>|  
+| **実行**               | <font size="-1">コードを実行します(理論上の課題)</font>|  
+|![](images/back.svg)    |  <font size="-1">前のタスクに移動</font>|  
+|![](images/forward.svg) <font size="-1">または</font> **次へ** | <font size="-1">次のタスクに進む</font>|  
+|![](images/reset.svg)   | <font size="-1">タスクで行ったすべての変更を破棄し、最初からやり直します</font>|  
+|![](images/commentTask.svg) | <font size="-1">Stepikで課題ページを表示し、コメントを残してください</font>|  
+|<a>ソリューションのピーク...</a>| <font size="-1">正解を明らかにし、<b>差分</b>を表示します。</font>|  
+
+「課題の説明」ウィンドウを完全に非表示にせずに、表示したままにしておくことをオススメします。
+
+気が散る場合は、「課題の説明」ウィンドウの右上隅にある ![](images/hideToolWindow.svg) ボタンをクリックして非表示にできます。
+
+2台のモニタを使用する場合は、「課題の説明」ウィンドウ(パネル)をフローティングモードに切り替えて、2台目のモニタに移動するか、IDE のメインウィンドウの近くに配置すると便利な場合があります。
+
+これを行うには、ツールウィンドウの設定 ![](images/gear.svg) アイコンをクリックします:
+
+<img src="images/edu_task_description_window_settings.png" width="60%"/>
+
+<style>
+img {
+  display: inline !important;
+}
+table, th, td {
+  border: 1px solid black;
+  border-collapse: collapse;
+}
+th, td {
+  padding: 5px;
+}
+table td:nth-child(1) {
+    text-align: center;
+}
+</style>
+
diff -Naur "a/Loops/Break keyword/task.md" "b/Loops/Break keyword/task.md"
--- "a/Loops/Break keyword/task.md" 2022-04-06 14:37:38.947010101 +0900
+++ "b/Loops/Break keyword/task.md" 2022-04-06 14:38:43.363950514 +0900
@@ -1,13 +1,14 @@
-## Break keyword
-
-An infinite loop is a loop that never exits. If the loop condition happens to 
-always be `True`, such a loop becomes infinite. The most straightforward way to create
-an infinite loop is to use `while True`. The `break` keyword is used to 
-escape the loop.  
-
-  
-Write a condition to exit the loop on its third iteration after evaluating if `animal`
-is equal to `elephant`.  Use the `break` statement.  The `zoo` list in the end should contain 
-only `lion` and `tiger` (because you `pop` all the other ones in the loop).
-
-<div class="hint">Use <code>==</code> to check if <code>animal</code> is equal to <code>"elephant"</code>.</div>
+## Break キーワード :(Break keyword)
+
+無限ループは、決して終了しないループです。
+ループ条件が常に`True`である場合、そのようなループは無限になります。
+
+無限ループを作成する最も簡単な方法は、`while True` を使用することです。
+`break` キーワードは、ループをエスケープするために使用されます。
+
+`animal` が `elephant` と等しいかどうかを評価した後、3回目の反復でループを終了する条件を記述します。
+ `break` ステートメントを使用します。
+最後の `zoo` リストには `lion` と `tiger` だけが含まれている必要があります(ループ内の他のすべてのものを `pop` するため)。
+
+<div class='hint'> <code>==</code> を使用して、<code>animal</code> が <code>"elephant"</code> と等しいかどうかを確認します。</div>
+
diff -Naur "a/Loops/Continue keyword/task.md" "b/Loops/Continue keyword/task.md"
--- "a/Loops/Continue keyword/task.md"  2022-04-06 14:37:38.955010218 +0900
+++ "b/Loops/Continue keyword/task.md"  2022-04-06 14:38:43.371950630 +0900
@@ -1,10 +1,11 @@
-## Continue keyword
-
-The `continue` keyword is used to skip the rest of the code inside the loop for 
-the current iteration only and proceed right to the next one. The loop returns to the `for` or 
-`while` statement and evaluates the condition again. If there is no next item, 
-the `else` clause is executed if it is present.
-  
-Print only the odd numbers `1, 3, 5, 7, 9`.  
-
-<div class='hint'>Use the <code>%</code> operator to check if <code>x</code> is even.</div>
+## continue キーワード :(Continue keyword)
+
+`continue` キーワードは、現在の反復でのみループ内の残りのコードをスキップし、次の反復に進むために使用されます。
+
+ループは `for` または `while` ステートメントに戻り、条件を再度評価します。
+次の項目がない場合、存在する場合は `else` 句が実行されます。
+
+奇数の `1、3、5、7、9` のみを出力します。
+
+<div class='hint'> <code>%</code> 演算子を使用して、<code>x</code> が偶数かどうかを確認します。</div>
+
diff -Naur "a/Loops/Else with loops/task.md" "b/Loops/Else with loops/task.md"
--- "a/Loops/Else with loops/task.md"   2022-04-06 14:37:38.951010159 +0900
+++ "b/Loops/Else with loops/task.md"   2022-04-06 14:38:43.367950572 +0900
@@ -1,40 +1,41 @@
-## Else with loops
-
-We saw that the `break` statement breaks out of the innermost enclosing `for` or `while` loop.
-
-Python also allows loop statements to have an `else` clause. It is executed when the loop terminates
-through exhaustion of the iterable (with `for`) or when the condition becomes `False`
-(with `while`), but not when the loop is terminated by a `break` statement. Check
-out this example of a loop which searches for prime numbers:
-
-```python
-for n in range(2, 10):
-    for x in range(2, n):
-        if n % x == 0:
-            print(n, 'equals', x, '*', n//x)
-            break
-    else:
-        # loop fell through without finding a factor
-        print(n, 'is a prime number')
-```
-```text
-2 is a prime number
-3 is a prime number
-4 equals 2 * 2
-5 is a prime number
-6 equals 2 * 3
-7 is a prime number
-8 equals 2 * 4
-9 equals 3 * 3
-```
-In this code, the `else` clause belongs to the `for` loop, not the
-`if` statement.
-
-Remember, an `else` after an `if` statement is skipped and NOT executed if the expression following 
-`if` is `True`, while in the case of loops, an `else` clause is executed after the loop itself
-is completed (unless there was a `break` in there somewhere).
-
-In the code editor, add two lines of code to the second loop to make sure the loop only prints
-numbers 1 and 2 and never prints the phrase `"for loop is done"`.
-
-<div class="hint">It should terminate at number 3.</div>
\ ファイル末尾に改行がありません
+##  Else with ループ :(Else with loops)
+
+「それ以外の場合はループ」
+
+`break` ステートメントは、最も内側を囲む `for` または `while` ループから抜け出すことがわかりました。
+Python では、ループステートメントに `else` 句を含めることもできます。
+
+iterable の枯渇( `for` を使用)によってループが終了したとき、または条件が `False`( `while` を使用)になったときに実行されますが、ループが `break` ステートメントによって終了したときは実行されません。
+
+素数を検索するループの次の例を確認してください:
+
+```python
+for n in range(2, 10):
+    for x in range(2, n):
+        if n % x == 0:
+            print(n, 'equals', x, '*', n//x)
+            break
+    else:
+        # loop fell through without finding a factor
+        print(n, 'is a prime number')
+```
+```text
+2 is a prime number
+3 is a prime number
+4 equals 2 * 2
+5 is a prime number
+6 equals 2 * 3
+7 is a prime number
+8 equals 2 * 4
+9 equals 3 * 3
+```
+
+このコードでは、`else` 句は `if` ステートメントではなく、`for` ループに属しています。
+
+`if` ステートメントの後の `else` はスキップされ、 `if` に続く式が `True` の場合は実行されませんが、
+ループの場合、(どこかに「休憩」がない限り)`else` 句はループ自体が完了した後に実行されます。
+
+コードエディタで、2行目のコードを 2行目に追加して、ループが 1 と 2 の数字のみを出力し、
+`"for loop is done"` というフレーズを出力しないようにします。
+
+<div class='hint'>番号3で終了する必要があります。</div>
+
diff -Naur "a/Loops/For loop/task.md" "b/Loops/For loop/task.md"
--- "a/Loops/For loop/task.md"  2022-04-06 14:37:38.919009691 +0900
+++ "b/Loops/For loop/task.md"  2022-04-06 14:38:43.343950222 +0900
@@ -1,15 +1,16 @@
-## for loop
-
-The `for` statement is used to iterate over the elements of a sequence (such as 
-a string, tuple, or list) or another iterable object. The sequence is evaluated once.
-On each iteration, the variable defined in the `for` loop will be assigned to the next value
-in the list. The code following the line with the `for` statement is executed once 
-for each item. When the items are exhausted, the loop terminates.
-
-You can read more about the `for` statement on <a href="https://docs.python.org/3/reference/compound_stmts.html#the-for-statement">this page</a> of Python Documentation.
-  
-Print each prime number from the `primes` list using the `for` loop. A prime 
-number is a natural number greater than `1` that has no positive divisors 
-other than `1` and itself.  
-
-<div class='hint'>Use a <code>for</code> loop to iterate over <code>primes</code> and print each element one by one.</div>
+## for ループ :(for loop)
+
+`for` ステートメントは、シーケンスの要素(文字列、タプル、リストなど)または別の反復可能なオブジェクトを反復処理するために使用されます。
+
+シーケンスは 1回評価されます。
+各反復で、`for` ループで定義された変数がリスト内の次の値に割り当てられます。
+`for`ステートメントの行に続くコードは、アイテムごとに 1回実行されます。
+アイテムが使い果たされると、ループは終了します。
+
+Pythonドキュメントの <a href="https://docs.python.org/3/reference/compound_stmts.html#the-for-statement"> このページ</a> で `for` ステートメントの詳細を読むことができます。
+
+`for` ループを使用して、`primes` リストから各素数を出力します。
+素数は `1` より大きい自然数であり、`1` とそれ自体以外に正の約数はありません。
+
+<div class='hint'> <code>for</code> ループを使用して、<code>primes</code> を反復処理し、各要素を1つずつ出力します。</div>
+
diff -Naur "a/Loops/List Comprehension/task.md" "b/Loops/List Comprehension/task.md"
--- "a/Loops/List Comprehension/task.md"    2022-04-06 14:37:38.931009867 +0900
+++ "b/Loops/List Comprehension/task.md"    2022-04-06 14:38:43.355950397 +0900
@@ -1,41 +1,52 @@
-## List Comprehension
-
-You can use a loop to build a list (or another data structure).
-For example:
-
-```python
-my_list = []
-for i in range(5):
-    my_list.append(i)
-
-print(my_list)
-```
-Output:
-```text
-[0, 1, 2, 3, 4]
-```
-
-This is nice, but quite bulky. List comprehension offers a more compact syntax when you want to create a new list based on the values of an existing list
-or another iterable (tuple, string, array, range, etc.). It does the same task and simplifies the program. Typically, list comprehensions are written in a single line of code.
-
-```python
-my_list = [i for i in range(5)]
-print(my_list)
-```
-Output:
-```text
-[0, 1, 2, 3, 4]
-```
-List comprehensions are also more efficient computationally than a `for` loop.
-
-In the code editor, use list comprehension to build `my_efficient_list` from the elements of `my_inefficient_list`
-by adding $10$ to each of them. For example, the first element of `my_inefficient_list` is $1 + 10 = 11$,
-so the first element of `my_efficient_list` should be $11 + 10 = 21$, and so on.
-
-
-<div class="hint">
-
-In the example above, we used `i for i in range(5)`. You can modify `i` as you like 
-right inside this expression. For example, to subtract `5` from every `i`, you can do 
-`i - 5 for i in range(5)`.
-</div>
\ ファイル末尾に改行がありません
+## リスト内包 :(List Comprehension)
+
+ループを使用して、リスト(または別のデータ構造)を作成できます。
+
+例えば:
+
+
+```python
+my_list = []
+for i in range(5):
+    my_list.append(i)
+
+print(my_list)
+```
+
+出力:
+```text
+[0, 1, 2, 3, 4]
+```
+
+これは素晴らしいですが、かなりかさばります。
+
+リスト内包表記は、既存のリストまたは別の反復可能オブジェクト(タプル、文字列、配列、範囲など)の値に基づいて新しいリストを作成する場合に、よりコンパクトな構文を提供します。
+
+それは同じタスクを実行し、プログラムを簡素化します。
+通常、リスト内包表記は 1行のコードで記述されます。
+
+
+```python
+my_list = [i for i in range(5)]
+print(my_list)
+```
+出力:
+```text
+[0, 1, 2, 3, 4]
+```
+
+リスト内包表記は、`for` ループよりも計算効率が高くなります。
+
+コードエディタで、リスト内包表記を使用して、各要素に $10$ を追加することにより、
+`my_inefficient_list` の要素から `my_efficient_list` を作成します。
+
+例えば、`my_inefficient_list` の最初の要素は $1 + 10 = 11$ であるため、
+`my_efficient_list` の最初の要素は $11 + 10 = 21$ になります。
+
+<div class='hint'>
+
+上記の例では、 `i for i in range(5)` を使用しました。この式の中で、好きなように `i` を変更できます。
+
+例えば、すべての `i` から `5` を引くには、 `i - 5 for i in range(5)` に対して `i - 5` を実行できます。
+</div>
+
diff -Naur "a/Loops/Loop over a string/task.md" "b/Loops/Loop over a string/task.md"
--- "a/Loops/Loop over a string/task.md"    2022-04-06 14:37:38.923009750 +0900
+++ "b/Loops/Loop over a string/task.md"    2022-04-06 14:38:43.347950280 +0900
@@ -1,9 +1,10 @@
-## Loop over a string
-
-As we discussed earlier, strings in Python are in many ways similar to lists. 
-You can iterate over a string just like you would iterate over a list.  
-  
-Use a loop to count how many characters `hello_world` contains. Store 
-this number in the variable `length`.  
-
-<div class='hint'>Use a <code>for</code> loop to iterate over the <code>hello_world</code> string.</div>
+## 文字列をループする :( Loop over a string)
+
+前に説明したように、Python の文字列は多くの点でリストに似ています。
+リストを反復処理するのと同じように、文字列を反復処理できます。
+
+ループを使用して、`hello_world` に含まれる文字数をカウントします。
+この数値を変数 `length` に格納します。
+
+<div class='hint'> <code>for</code> ループを使用して、<code>hello_world</code> 文字列を反復処理します。</div>
+
diff -Naur "a/Loops/Nested List Comprehension/task.md" "b/Loops/Nested List Comprehension/task.md"
--- "a/Loops/Nested List Comprehension/task.md" 2022-04-06 14:37:38.935009925 +0900
+++ "b/Loops/Nested List Comprehension/task.md" 2022-04-06 14:38:43.359950455 +0900
@@ -1,49 +1,49 @@
-## Nested List Comprehension
-
-Nested list comprehensions are simply list comprehensions nested within other 
-list comprehension. This is quite similar to [nested loops](course://Loops/Nested for Loop).
-Here is a program that builds a [nested list](course://Data structures/Nested Lists) using a nested loop:
-
-```python
-matrix = []
-
-for i in range(3):
-
-    # Append an empty sublist inside the list
-    matrix.append([])
-
-    for j in range(0, 10, 2):
-        matrix[i].append(j)
-
-print(matrix)
-```
-Output:
-```text
-[[0, 2, 4, 6, 8], [0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
-```
-
-The same can be done in just one line using nested list comprehension:
-
-```python
-matrix = [[j for j in range(0, 10, 2)] for i in range(3)]
-print(matrix)
-```
-Output:
-```text
-[[0, 2, 4, 6, 8], [0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
-```
-
-### Task
-
-Create a $10×10$ `matrix` such that each row (sublist) contains **characters** 0–9 from
-`string`. Use list comprehension to complete the task in one line of code. 
-
-<div class="hint">
-
-Follow the example in the task description. You simply need to use `string` as an iterable instead
-of one of the ranges.
-
-</div>
-
-
-
+## ネストされたリスト内包 :(Nested List Comprehension)
+
+「ネストされたリスト内包」は、他の「リスト内包」内のネストされた「リスト内包」です。
+
+これは「[ネストされたループ](course://Loops/Nested for Loop) 」と非常によく似ています。
+
+「ネストされたループ」を使用して「[ネストされたリスト](course://Data structures/Nested Lists) 」を構築するプログラムは次のとおりです:
+
+```python
+matrix = []
+
+for i in range(3):
+
+    # Append an empty sublist inside the list
+    matrix.append([])
+
+    for j in range(0, 10, 2):
+        matrix[i].append(j)
+
+print(matrix)
+```
+
+出力:
+```text
+[[0, 2, 4, 6, 8], [0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
+```
+
+「ネストされたリスト内包」表記を使用すると、同じことが 1行で実行できます:
+
+```python
+matrix = [[j for j in range(0, 10, 2)] for i in range(3)]
+print(matrix)
+```
+出力:
+```text
+[[0, 2, 4, 6, 8], [0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
+```
+
+### 課題
+
+各行(サブリスト)に `string` の **文字(characters)** 0〜9 が含まれるように、$10×10$ の `matrix` を作成します。
+リスト内包表記 (list comprehension) を使用して、1行のコードで課題を完了します。
+
+<div class='hint'>
+
+「課題の説明」ウィンドウの例に従ってください。範囲の 1つではなく、反復可能として `string` を使用する必要があります。
+
+</div>
+
diff -Naur "a/Loops/Nested for Loop/task.md" "b/Loops/Nested for Loop/task.md"
--- "a/Loops/Nested for Loop/task.md"   2022-04-06 14:37:38.927009808 +0900
+++ "b/Loops/Nested for Loop/task.md"   2022-04-06 14:38:43.351950339 +0900
@@ -1,48 +1,54 @@
-## Nested Loops
-
-A nested loop is a loop inside another loop.
-The inner loop is executed once for each iteration of the outer loop.
-
-```python
-adjectives = ["black", "stylish", "expensive"]
-clothes = ["jacket", "shirt", "boots"]
-
-for x in adjectives:
-  for y in clothes:
-    print(x, y)
-```
-Output:
-```text
-black jacket
-black shirt
-black boots
-stylish jacket
-stylish shirt
-stylish boots
-expensive jacket
-expensive shirt
-expensive boots
-```
-<details>
-
-Note that any type of loop can be nested inside another loop. 
-For example, a [`while` loop](course://Loops/While loop) (see further) can be nested inside a `for` loop, or vice versa.
-</details>
-
-
-You are given a tic-tac-toe board of 3x3, your task is to print every position. Coordinates along each side
-are stored in the list `coordinates`. The output should be:
-```text
-1 x 1
-1 x 2
-1 x 3
-2 x 1
-...
-```
-and so on for every combination of coordinates.
-
-<div class="hint">
-
-In the nested `for` loop, iterate over the same list once again but using another variable name
-this time (`coordinate2`).
-</div>
\ ファイル末尾に改行がありません
+## ネストされたループ :(Nested Loops)
+
+ネストされたループは、別のループ内のループです。
+内側のループは、外側のループの反復ごとに 1回実行されます。
+
+```python
+adjectives = ["black", "stylish", "expensive"]
+clothes = ["jacket", "shirt", "boots"]
+
+for x in adjectives:
+  for y in clothes:
+    print(x, y)
+```
+出力:
+```text
+black jacket
+black shirt
+black boots
+stylish jacket
+stylish shirt
+stylish boots
+expensive jacket
+expensive shirt
+expensive boots
+```
+
+<details>
+
+どのタイプのループも別のループ内にネストできることに注意してください。
+例えば、 [`while` loop](course://Loops/While loop) (詳細を参照)は、`for` ループ内にネストできます。
+その逆も可能です。
+</details>
+
+3x3 の三目並べボードが与えられます。
+課題は、すべての位置を出力することです。
+各辺に沿った座標は、リスト `coordinates` に保存されます。
+
+出力は次のようになります:
+
+```text
+1 x 1
+1 x 2
+1 x 3
+2 x 1
+...
+```
+
+座標のすべての組み合わせについても同様です。
+
+<div class='hint'>
+
+ネストされた `for` ループで、同じリストをもう一度繰り返しますが、今回は別の変数名(`coordinate2`)を使用します。
+</div>
+
diff -Naur "a/Loops/While loop/task.md" "b/Loops/While loop/task.md"
--- "a/Loops/While loop/task.md"    2022-04-06 14:37:38.939009984 +0900
+++ "b/Loops/While loop/task.md"    2022-04-06 14:38:43.363950514 +0900
@@ -1,10 +1,12 @@
-## while loop
-
-A `while` loop is somewhat similar to an `if` statement: it executes some code if some 
-condition is `True`. The key difference is that it will continue to execute indented 
-code for as long as the condition is `True`.  If the expression is `False`, the loop terminates.
-  
-Print all squares from `1` to `9`  `(1, 4, ... , 81)`. Use the `number` variable in a
-`while` loop.  
-
-<div class='hint'>Make sure that <code>number</code> is strictly less than 10 in the condition.</div>
+## while ループ :(while loop)
+
+`while` ループは `if` ステートメントにいくぶん似ています: ある条件が `True` の場合にコードを実行します。
+主な違いは、条件が `True` である限り、インデントされたコードを実行し続けることです。
+
+式が `False` の場合、ループは終了します。
+
+ `1` から `9`  `(1, 4, ... , 81)` までのすべての正方形を出力します。
+`while` ループで `number` 変数を使用します。
+
+<div class='hint'>条件で <code>number</code> が厳密に10未満であることを確認してください。</div>
+
diff -Naur "a/Modules and packages/Built-in modules/task.md" "b/Modules and packages/Built-in modules/task.md"
--- "a/Modules and packages/Built-in modules/task.md"   2022-04-06 14:37:38.967010394 +0900
+++ "b/Modules and packages/Built-in modules/task.md"   2022-04-06 14:38:43.387950863 +0900
@@ -1,28 +1,30 @@
-## Built-in modules
-
-Python comes with a [library of standard modules](https://docs.python.org/3/library/). 
-
-Some modules are built into the interpreter; these provide access to operations that are 
-not part of the core of the language but are nevertheless built in, either for efficiency 
-or to provide access to operating system primitives, such as system calls.  
-One particular module deserves some attention: `sys`, which is built into every Python 
-interpreter. The variables `sys.ps1` and `sys.ps2` define the strings used as primary and 
-secondary prompts if the interpreter is in the interactive mode:
-
-```text
->>> import sys
->>> sys.ps1
-'>>> '
->>> sys.ps2
-'... '
-```
-
-The variable `sys.path` is a list of strings that determines the interpreter’s search path 
-for modules: see what it prints for you when you run the code of the task.
-
-Remember that you can use &shortcut:CodeCompletion; after a dot (.) to explore available 
-methods of a module. You can read more about standard modules <a href="https://docs.python.org/3/tutorial/modules.html#standard-modules">here</a>.
-  
-Print the current date using an imported built-in module `datetime`.  
-
-<div class='hint'>Use the <code>datetime.datetime.today()</code> function.</div>
+## 内蔵モジュール :(Built-in modules)
+
+Python には、[標準モジュールのライブラリ](https://docs.python.org/3/library/) が付属しています。
+
+一部のモジュールはインタープリタに組み込まれています。これらは、言語のコアの一部ではないが、効率のため、またはシステムコールなどのオペレーティングシステム プリミティブへのアクセスを提供するために組み込まれている操作へのアクセスを提供します。
+
+1つの特定のモジュールは注意に値します: `sys` 。これはすべての Python インタープリターに組み込まれています。
+
+変数 ` sys.ps1` および `sys.ps2` は、インタプリタがインタラクティブモードの場合にプライマリおよびセカンダリプロンプトとして使用される文字列を定義します:
+
+```text
+>>> import sys
+>>> sys.ps1
+'>>> '
+>>> sys.ps2
+'... '
+```
+
+変数 `sys.path` は、モジュールのインタープリタの検索パスを決定する文字列のリストです。
+課題のコードを実行すると何が出力されるか、を確認してください。
+
+&shortcut :CodeCompletion; (コード補完機能)を使用できることを忘れないでください:
+ドット (.) の後に、モジュールの使用可能なメソッドを調べます。
+
+標準モジュールの詳細については、<a href="https://docs.python.org/3/tutorial/modules.html#standard-modules">こちら</a> をご覧ください。
+
+インポートされた組み込みモジュール `datetime` を使用して現在の日付を出力します。
+
+ <div class='hint'> <code>datetime.datetime.today()</code> 関数を使用します。</div>
+
diff -Naur "a/Modules and packages/Executing modules as scripts/task.md" "b/Modules and packages/Executing modules as scripts/task.md"
--- "a/Modules and packages/Executing modules as scripts/task.md"   2022-04-06 14:37:38.987010686 +0900
+++ "b/Modules and packages/Executing modules as scripts/task.md"   2022-04-06 14:38:43.407951155 +0900
@@ -1,66 +1,66 @@
-## Executing modules as scripts
-
-A Python module is a file containing executable statements as well as function or class definitions. 
-These statements are executed the first time the module name is encountered in an `import` statement.
-The file name is the module name with the suffix .py appended. Within a module, the 
-module’s name (as a string) is available as the value of the global variable `__name__`.
-
-
-When you run a module **directly** (that is, not by importing it into another one),
-the code in the module will be executed, just as if you imported it, but with 
-`__name__` set to `"__main__"`. 
-
-You can use `__name__` and `__main__` like this:
-
-```python
-if __name__ == "__main__":
-   # Do something here
-```
-
-The statements inside this block will be executed only if the module is run directly and not through import
-into another module. For example, let's consider two files:
-
-main_program:
-```python
-import some_module
-
-print(f"main_program __name__ is: {__name__}")
-
-if __name__ == "__main__":
-   print("main_program executed directly")
-else:
-   print("main_program executed when imported")
-```
-
-some_module:
-```python
-print(f"some_module __name__ is: {__name__}")
-
-if __name__ == "__main__":
-   print("some_module executed directly")
-else:
-   print("some_module executed when imported")
-```
-
-Output after running `main_program`:
-```text
-some_module __name__ is: some_module
-some_module executed when imported
-main_program __name__ is: __main__
-main_program executed directly
-```
-
-Output after running `some_module`:
-```text
-some_module __name__ is: __main__
-some_module executed directly
-```
-
-Modify `task.py` and `some_module.py` so that when you run task.py, your output is as follows:
-
-```text
-This is a message from some_module.
-This is a message from __main__.
-This is a message from the function in the imported module.
-This should be printed ONLY when task.py is called directly.
-```
\ ファイル末尾に改行がありません
+## モジュールをスクリプトとして実行します :(Executing modules as scripts)
+
+Python モジュールは、実行可能ステートメントと関数またはクラスの定義を含むファイルです。
+
+これらのステートメントは、`import` ステートメントでモジュール名が最初に検出されたときに実行されます。
+ファイル名は、接尾辞 .py が追加されたモジュール名です。
+
+モジュール内では、モジュールの名前(文字列として)は、グローバル変数 `__name__` の値として使用できます。
+
+モジュールを**直接**(つまり、別のモジュールにインポートすることなく)実行すると、
+モジュール内のコードは、インポートした場合と同じように実行されますが、
+ `__name__` は `"__main__"` に設定されています。
+
+次のように `__name__` と `__main__` を使用できます:
+
+```python
+if __name__ == "__main__":
+   # Do something here
+```
+
+このブロック内のステートメントは、モジュールが直接実行され、別のモジュールへのインポートを介さない場合にのみ実行されます。例えば、2つのファイルについて考えてみましょう:
+
+main_program:
+```python
+import some_module
+
+print(f"main_program __name__ is: {__name__}")
+
+if __name__ == "__main__":
+   print("main_program executed directly")
+else:
+   print("main_program executed when imported")
+```
+
+some_module:
+```python
+print(f"some_module __name__ is: {__name__}")
+
+if __name__ == "__main__":
+   print("some_module executed directly")
+else:
+   print("some_module executed when imported")
+```
+
+`main_program` を実行した後の出力:
+```text
+some_module __name__ is: some_module
+some_module executed when imported
+main_program __name__ is: __main__
+main_program executed directly
+```
+
+`some_module` を実行した後の出力:
+```text
+some_module __name__ is: __main__
+some_module executed directly
+```
+`task.py`と`some_module.py`を変更して、task.py を実行したときに出力が次のようになるようにします:
+
+```text
+This is a message from some_module.
+This is a message from __main__.
+This is a message from the function in the imported module.
+This should be printed ONLY when task.py is called directly.
+```
+
diff -Naur "a/Modules and packages/From import/task.md" "b/Modules and packages/From import/task.md"
--- "a/Modules and packages/From import/task.md"    2022-04-06 14:37:38.975010511 +0900
+++ "b/Modules and packages/From import/task.md"    2022-04-06 14:38:43.395950980 +0900
@@ -1,45 +1,44 @@
-## from import
-
-One form of the import statement imports names `from` a module directly. This way, you 
-can use the imported name without the `module_name` prefix.  For example:
-
-```python
-from calculator import Add
-
-calc = Add()    # name `Add` used directly without prefix `calculator`
-```
-
-This does not introduce the name of the module from which the imports are taken in the 
-local symbol table (so in our example, `calculator` is not defined).
-
-There is even an option to import all names that a module defines:
-```python
-from calculator import *
-calc = Multiply()
-```
-This imports all names except those beginning with an underscore `_`. 
-In most cases, Python programmers do not use this, since it introduces 
-an unknown set of names into the interpreter, possibly hiding some things 
-you have already defined.
-
-If the module name is followed by `as`, then the name following `as` is bound 
-directly to the imported module:
-
-```python
-import my_module as mm
-mm.hello_world()
-```
-This is effectively importing the module in the same way that `import my_module` will 
-do, with the only difference of it being available as `mm`. It can also be used 
-when utilising `from` with similar effects:
-
-```python
-from calculator import Subtract as Minus
-```
-
-Import the `Calculator` class from `calculator` and create an instance of this class. Remember how to access it correctly in 
-this case.
-
-
-<div class="hint">Note: The <code>Calculator</code> class should be called without a prefix because you 
-imported it directly.</div>
+## インポート :(from import)
+
+import ステートメントの 1つの形式は、`from` の名前でモジュールから直接インポートします。
+このようにして、インポートされた `module_name` をプレフィックスなしで使用できます。
+
+例えば:
+
+```python
+from calculator import Add
+
+calc = Add()    # name `Add` used directly without prefix `calculator`
+```
+
+これは、インポートが取得されるモジュールの名前をローカルシンボルテーブルに導入しません(したがって、この例では、 `calculator` は定義されていません)。
+
+モジュールが定義するすべての名前をインポートするオプションもあります:
+
+```python
+from calculator import *
+calc = Multiply()
+```
+
+これにより、アンダースコア`_`で始まる名前を除くすべての名前がインポートされます。
+ほとんどの場合、Python プログラマーはこれを使用しません。
+これは、未知の名前のセットをインタープリターに導入し、既に定義したものを隠す可能性があるためです。
+
+モジュール名の後に `as` が続く場​​合、`as` に続く名前はインポートされたモジュールに直接バインドされます:
+
+```python
+import my_module as mm
+mm.hello_world()
+```
+
+これは、 `import my_module` が行うのと同じ方法でモジュールを効果的にインポートしますが、唯一の違いは `mm` として使用できることです。同様の効果を持つ `from` を利用する場合にも使用できます:
+
+```python
+from calculator import Subtract as Minus
+```
+
+`calculator` から `Calculator` クラスをインポートし、このクラスのインスタンスを作成します。
+この場合、正しくアクセスする方法を覚えておいてください:
+
+<div class='hint'>注: この <code>Calculator</code> クラスは、直接インポートしたので、プレフィックスなしで呼び出す必要があります。</div>
+
diff -Naur "a/Modules and packages/Import module/task.md" "b/Modules and packages/Import module/task.md"
--- "a/Modules and packages/Import module/task.md"  2022-04-06 14:37:38.963010335 +0900
+++ "b/Modules and packages/Import module/task.md"  2022-04-06 14:38:43.383950805 +0900
@@ -1,31 +1,29 @@
-## Import module
-
-As your program gets longer, you may want to split it into several files for 
-easier maintenance. You may also want to use a handy function that you’ve written 
-in several programs without copying its definition into each of them.
-
-Modules in Python are simply Python files with the `.py` extension containing 
-Python definitions and statements.
-Modules are imported from other modules using the `import` keyword 
-and the file name without the extension `.py`. 
-
-Let's say you wrote a script called `my_funcs.py` with a bunch of functions (`func1`, `func2`, 
-etc.). Now, if you want to use those in another script that is placed in the same directory, 
-you can do `import my_funcs`. This does not import the names of the functions defined in `my_funcs` 
-directly, but using the module name, you can now access the functions, for example:
-```python
-my_funcs.func1()
-```
-
-Modules can import other modules. It is customary but not required to place all 
-import statements at the beginning of a module.
-
-You can find out more about modules in Python by reading [this section](https://docs.python.org/3/tutorial/modules.html) of The Python Tutorial. 
-  
-In the code editor, import the module `calculator` and create an instance of the class `Calculator` (`calc`). 
-Use the `add` method defined in `Calculator` in a loop to add up numbers from 0 to 99.
-
-<div class='hint'>Use the <code>import</code> keyword and the <code>calculator</code> reference.</div>
-<div class='hint'>Access the function from the module using syntax such as <code>module.function()</code>.</div>
-<div class="hint">Don't forget to provide the function with an argument.</div>
-
+## インポート モジュール :(Import module)
+
+プログラムが長くなると、メンテナンスを容易にするために、プログラムをいくつかのファイルに分割することをお勧めします。また、いくつかのプログラムで定義をコピーせずに、いくつかのプログラムで作成した便利な関数を使用することもできます。
+
+Python のモジュールは、Python の定義とステートメントを含む `.py` 拡張子を持つ単純な Python ファイルです。
+
+モジュールは、`import` キーワードと拡張子 `.py` のないファイル名を使用して他のモジュールからインポートされます。
+
+一連の関数( `func1`、` func2` など)を含む `my_funcs.py` というスクリプトを作成したとします。
+これで、同じディレクトリに配置されている別のスクリプトでそれらを使用する場合は、`import my_funcs` を実行できます。
+
+これは、 `my_funcs` で定義された関数の名前を直接インポートしませんが、モジュール名を使用して、次のように関数にアクセスできるようになります:
+
+```python
+my_funcs.func1()
+```
+モジュールは他のモジュールをインポートできます。
+慣例で行われていますが、すべてのインポートステートメントをモジュールの先頭に配置する必要はありません。
+
+Python チュートリアルの [このセクション](https://docs.python.org/3/tutorial/modules.html) を読むと、Python のモジュールについて詳しく知ることができます。
+
+コードエディタで、モジュール `calculator` をインポートし、クラス `Calculator` (`calc`) のインスタンスを作成します。
+
+ループ内の `Calculator` で定義された `add` メソッドを使用して、0 から 99 までの数値を合計します。
+
+<div class='hint'> <code>import</code> キーワードと <code>calculator</code> リファレンスを使用します。</div>
+<div class='hint'> <code>module.function()</code> などの構文を使用して、モジュールから関数にアクセスします。</div>
+<div class='hint'>関数に引数を指定することを忘れないでください。</div>
+
diff -Naur "a/Modules and packages/Packages/task.md" "b/Modules and packages/Packages/task.md"
--- "a/Modules and packages/Packages/task.md"   2022-04-06 14:37:38.983010628 +0900
+++ "b/Modules and packages/Packages/task.md"   2022-04-06 20:30:01.659610152 +0900
@@ -1,51 +1,47 @@
-## Packages
-
-Packages are a way of structuring Python’s module namespace by using “dotted module 
-names”. For example, the module name `A.B` designates a submodule named `B` in a package 
-named `A`. Just like the use of modules saves the authors of different modules from 
-having to worry about each other’s global variable names, the use of dotted module 
-names saves the authors of multi-module packages like [NumPy](https://numpy.org/) 
-or [Pillow](https://pypi.org/project/Pillow/) from having to worry about each other’s 
-module names.
-
-<div class="hint">The <code>__init__.py</code> files are required to make Python treat directories 
-containing the file as packages. This prevents directories with a common name, such 
-as <code>string</code>, from unintentionally hiding valid modules that occur later on the module search 
-path. In the simplest case, <code>__init__.py</code> can just be an empty file.</div>
-
-Check out the packages `functions` and `classes` we've created. Users of the packages 
-can import individual modules from the package, for example:
-
-```python
-import functions.greeting.hello
-```
-
-This loads the submodule `functions.greeting.hello`. It must be referenced with its full name:
-
-```python
-functions.greeting.hello.hello('Susan')
-```
-An alternative way of importing the submodule is:
-
-```python
-from functions.greeting import hello
-```
-
-This also loads the submodule `hello`, and makes it available without its package prefix, 
-so it can be used as follows:
-
-```python
-hello.hello('Susan')
-```
-
-You can learn more about packages by reading <a href="https://docs.python.org/3/tutorial/modules.html#packages">this page</a> of Python Documentation.
-
-In the code editor, import the `official` module properly to make the last `print` 
-statement work.
-
-In the second print statement, add a function call (find the right function) so that it prints a goodbye to `'Alex'`.
-
-<div class="hint">Access the module using syntax such as <code>package.subpackage.module</code>.</div>
-<div class="hint">Use syntax such as <code>import module as something</code>.</div>
-<div class="hint">Check out imports: there's one that might have the right function for the second task.
-Be careful when using it: the module is already imported with a specific name.</div>
+## パッケージ :(Packages)
+
+パッケージは、「点線のモジュール名」を使用してPython のモジュール名前空間を構造化する方法です。
+
+例えば、モジュール名 `A.B` は、`A` という名前のパッケージ内の `B` という名前のサブモジュールを指定します。
+
+モジュールを使用することで、さまざまなモジュールの作成者が互いのグローバル変数名について心配する必要がなくなるのと同様に、点線のモジュール名を使用すると、[NumPy](https://numpy.org/) のようなマルチモジュールパッケージの作成者を省略できます。または [Pillow](https://pypi.org/project/Pillow/) は、互いのモジュール名を気にする必要がありません。
+
+<code>__init__.py</code> ファイルは、Python でファイルを含むディレクトリをパッケージとして処理するために必要です。これにより、<code> string </code> などの一般名のディレクトリが、モジュール検索パスの後半で発生する歪んだモジュールを意図せずに非表示にするのを防ぎます。最も単純なケースでは、<code>__init__.py</code> は空のファイルにすることができます。</div>
+
+私たちが作成したパッケージ `functions` と `classes` をチェックしてください。
+パッケージのユーザーは、パッケージから個々のモジュールをインポートできます。
+
+例を示します:
+
+```python
+import functions.greeting.hello
+```
+
+これにより、サブモジュール `functions.greeting.hello` がロードされます。フルネームで参照する必要があります:
+
+```python
+functions.greeting.hello.hello('Susan')
+```
+
+サブモジュールをインポートする別の方法は次のとおりです:
+
+```python
+from functions.greeting import hello
+```
+
+これにより、サブモジュール `hello` もロードされ、パッケージプレフィックスなしで使用できるようになるため、次のように使用できます:
+
+```python
+hello.hello('Susan')
+```
+パッケージの詳細については、Python ドキュメントの <a href="https://docs.python.org/3/tutorial/modules.html#packages">このページ</a> をご覧ください。
+
+コードエディタで、 `official` モジュールを適切にインポートして、最後の `print` ステートメントを機能させます。
+
+2番目の print ステートメントで、関数呼び出しを追加して(適切な関数を見つけて)、`'Alex'` に別れを告げます。
+
+<div class='hint'><code>package.subpackage.module</code> などの構文を使用してモジュールにアクセスします。</div>
+<div class='hint'><code>import module as something</code> などの構文を使用します。</div>
+<div class='hint'>インポートを確認してください: 2番目の課題に適切な機能を備えている可能性のあるインポートがあります。
+使用するときは注意してください。モジュールはすでに特定の名前でインポートされています。</div>
+
diff -Naur a/README.md b/README.md
--- a/README.md 2022-04-06 14:37:38.991010745 +0900
+++ b/README.md 2022-04-06 14:38:43.411951213 +0900
@@ -1,14 +1,12 @@
-# Introduction to Python course  (Educational Products version) [![official JetBrains project](http://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
-<p>This is an introductory Python course by JetBrains Educational Products.
-  The target audience are the people with little or no experience in programming who
-  would like to start learning Python.</p>
-
-  <p>In this course, you will learn about the basics, such as variables and operations
-  with them, strings and other data structures, boolean operators, conditions, control
-  flow, and so on. You will try implementing loops, functions, and classes, as well as
-  using parts of your code as imported modules, and working with text files.</p>
-
-  <p>Have fun and good luck!</p>
-
-  <p>P.S. Want to contribute? Feel free to send a pull request to this course’s
-  <a href=”https://github.com/jetbrains-academy/introduction_to_python”>git repo</a>.</p>
+# 「Introduction to Python」コースの紹介(教育製品バージョン)[![official JetBrains project](http://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
+
+<p>これは、JetBrains Educational Products によるPython の入門コースです。
+対象読者は、プログラミングの経験がほとんどまたはまったくない、Python の学習を開始したい人々です。</p>
+
+<p>このコースでは、変数とその操作、文字列とその他のデータ構造、ブール演算子、条件、制御フローなどの基本について学習します。ループ、関数、クラスを実装し、コードの一部をインポートされたモジュールとして使用し、テキストファイルを操作してみます。</p>
+
+<p>楽しんで頑張ってください!</p>
+
+<p>P.S. 貢献したいですか?このコースにプルリクエストを送信してください
+<a href=”https://github.com/jetbrains-academy/introduction_to_python”>git リポジトリ</a>.</p>
+
diff -Naur "a/Strings/Basic string methods/task.md" "b/Strings/Basic string methods/task.md"
--- "a/Strings/Basic string methods/task.md"    2022-04-06 14:37:39.023011212 +0900
+++ "b/Strings/Basic string methods/task.md"    2022-04-06 14:38:43.459951913 +0900
@@ -1,12 +1,17 @@
-## Basic string methods
-
-There are many useful string methods. For instance, you can use the `lower()` method to get 
-rid of any capitalization in your strings. The `upper()` method is used to make a string 
-uppercase. To call any string method, type a dot after the string (or a variable containing 
-the string) and the method name after it, e.g., `"John".upper()`. In PyCharm, you can 
-explore all available string methods by using the &shortcut:CodeCompletion; shortcut after the dot. 
-Detailed information about all string methods can be found <a href="https://docs.python.org/3/library/stdtypes.html#string-methods">here</a>.
-  
-Print `monty_python` in upper case using an appropriate string method.  
-
-<div class='hint'>Pay attention to how the <code>lower()</code> method is used in our code.</div>
+## 基本的な文字列メソッド :(Basic string methods)
+
+多くの便利な文字列メソッドがあります。
+
+例えば、 `lower()` メソッドを使用して、文字列の大文字と小文字を削除できます。  
+`upper()` メソッドは、文字列を大文字にするために使用されます。
+
+文字列メソッドを呼び出すには、文字列(または文字列を含む変数)の後にドットを入力し、その後にメソッド名を入力します。(例: `"John".upper()`)
+
+PyCharm では、ドットを入力した後のショートカット( &shortcut:CodeCompletion; )を使用して、使用可能なすべての文字列メソッドを調べることができます。
+
+すべての文字列メソッドの詳細については、<a href="https://docs.python.org/3/library/stdtypes.html#string-methods">こちら</a> をご覧ください。
+
+適切な文字列メソッドを使用して、大文字で `monty_python` を出力します。
+
+<div class='hint'>コードで <code>lower()</code> メソッドがどのように使用されているかに注意してください。</div>
+
diff -Naur "a/Strings/Character escaping/task.md" "b/Strings/Character escaping/task.md"
--- "a/Strings/Character escaping/task.md"  2022-04-06 14:37:39.019011154 +0900
+++ "b/Strings/Character escaping/task.md"  2022-04-06 14:38:43.455951855 +0900
@@ -1,27 +1,34 @@
-## Character escaping
-
-Backslash is used to escape special symbols, such as single or double quotation marks, 
-for example, `"It\'s me"` or `"She said \"Hello\""`. If you need to actually type the <code>\\</code>
-character as part of your string, you will need to escape it too. For example, here's how 
-you print a single backslash:
-
-```python
-print('\\')
-```
-
-The special symbol `'\n'` is used to add a line break to a string, while `'\t'` means tabulation.
-
-Quotes have special meanings, and they can be escaped with a backslash too. 
-If you need to print quotes inside a string, use a different kind of quotes: single quotation 
-marks may be used in a double-quoted string without escaping, and vice versa. Also, as a side note, it is a good 
-idea to pick your favorite kind of quotes and use them consistently.
-
-You can learn more about escaping from <a href="https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals">this section</a> of Python Documentation.  
-
-Print out the following text using one string:  
-```text
-The name of this ice cream is "Sweet'n'Tasty"  
-```
-
-
-<div class='hint'>Use the backslash to escape quotes.</div>
+## キャラクターエスケープ :(Character escaping)
+
+バックスラッシュは、一重引用符や二重引用符などの特殊記号をエスケープするために使用されます。
+
+例えば、`"It\'s me"`(それは私です)、または `"She said \"Hello\""` (彼女は「こんにちは」と言った)などです。
+
+文字列の一部として実際に <code>\\</code> 文字を入力する必要がある場合は、それもエスケープする必要があります。
+
+例えば、単一の円記号を印刷する方法は次のとおりです:
+
+```python
+print('\\')
+```
+
+特殊記号 `'\n'` は文字列に「改行」を追加するために使用され、`'\t'` は「集計」を意味します。
+
+引用符には特別な意味があり、バックスラッシュを使用してエスケープすることもできます。
+
+文字列内に引用符を印刷する必要がある場合は、別の種類の引用符を使用してください。
+
+二重引用符で囲まれた文字列では、エスケープせずに一重引用符を使用できます。その逆も可能です。
+
+また、補足として、お気に入りの種類の引用符を選び、それらを一貫して使用することをお勧めします。
+
+エスケープの詳細については、Pythonドキュメントの <a href="https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals">このセクション</a> をご覧ください。
+
+1つの文字列を使用して次のテキストを出力します:
+
+```text
+The name of this ice cream is "Sweet'n'Tasty"  
+```
+
+<div class='hint'>バックスラッシュを使用して引用符をエスケープします。</div>
+
diff -Naur a/Strings/Concatenation/task.md b/Strings/Concatenation/task.md
--- a/Strings/Concatenation/task.md 2022-04-06 14:37:38.995010803 +0900
+++ b/Strings/Concatenation/task.md 2022-04-06 14:38:43.415951271 +0900
@@ -1,8 +1,10 @@
-## Concatenation
-
-Remember that some arithmetic operations can also apply to non-numeric types?
-Combining two strings using the `+` symbol is called concatenation.  
-  
-Use the `hello` and `world` variables to get a string `"Hello World"`.  
-
-<div class='hint'>Use chained concatenation and a single-space string <code>" "</code>.</div>
+## 連結 :(Concatenation)
+
+一部の算術演算は非数値型にも適用できることを覚えていますか?
+
+`+` 記号を使用して 2つの文字列を組み合わせると、「連結」と呼ばれます。
+
+`hello` 変数と `world` 変数を使用して、文字列 `"Hello World"` を取得します。
+
+<div class='hint'>連鎖連結と単一スペース文字列 <code>" "</code> を使用します。</div>
+
diff -Naur a/Strings/F-strings/task.md b/Strings/F-strings/task.md
--- a/Strings/F-strings/task.md 2022-04-06 14:37:39.027011271 +0900
+++ b/Strings/F-strings/task.md 2022-04-06 14:38:43.471952088 +0900
@@ -1,36 +1,36 @@
-## Formatted string literals
-
-A formatted string literal, or an f-string, is a string literal that is prefixed 
-with 'f' or 'F'. These strings may contain replacement fields, which are 
-expressions delimited by curly braces `{}`. 
-
-The parts of the string outside curly braces are treated literally. 
-Escape sequences are decoded like in ordinary string literals.
-Replacement expressions can contain line breaks (e.g., in triple-quoted strings), 
-but they cannot contain comments. Each expression is evaluated in the context 
-where the formatted string literal appears, in order from left to right.
-
-Here are some examples:
-```python
-name = "Fred"
-f"He said his name is {name}."
-```
-```text
-'He said his name is Fred.'
-```
-
-There are more fancy things you can do in f-strings, for example:
-```python
-f"{name.lower()} is funny."
-```
-
-```text
-'fred is funny.'
-```
-For more information about formatted string literals you can refer to <a href="https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals">Python Docs</a>.
-
-Try creating an f-string yourself. Also try running the code to see what it prints.
-
-<div class="hint">The value assigned to the <code>name</code> variable has to be a string, so it needs to be in quotes, 
-like so: <code>'Max'</code>.</div>
-
+## フォーマットされた文字列リテラル :(Formatted string literals)
+
+フォーマットされた文字列リテラル、または Fストリング (f-string) は、接頭辞 'f' または 'F' が付いた文字列リテラルです。これらの文字列には、中括弧 `{}` で区切られた式である置換フィールドが含まれる場合があります。
+
+中括弧の外側の文字列の部分は文字通り扱われます。  
+エスケープシーケンスは、通常の文字列リテラルのようにデコードされます。  
+置換式には改行を含めることができますが(トリプルクォート文字列など)、コメントを含めることはできません。  
+各式は、フォーマットされた文字列リテラルが表示されるコンテキストで、左から右の順に評価されます。
+
+いくつかの例を示します:
+
+```python
+name = "Fred"
+f"He said his name is {name}."
+```
+```text
+'He said his name is Fred.'
+```
+
+例えば、Fストリングで実行できるよりも凝ったことができます:
+
+```python
+f"{name.lower()} is funny."
+```
+
+```text
+'fred is funny.'
+```
+
+フォーマットされた文字列リテラルの詳細については、<a href="https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals"> Python Docs</a> を参照してください。
+
+自分で、Fストリングを作成してみてください。
+また、コードを実行して、何が出力されるかを確認してください。
+
+<div class='hint'> <code>name</code> 変数に割り当てられる値は文字列である必要があるため、<code>'Max'</code> のように引用符で囲む必要があります。</div>
+
diff -Naur "a/Strings/In operator/task.md" "b/Strings/In operator/task.md"
--- "a/Strings/In operator/task.md" 2022-04-06 14:37:39.015011095 +0900
+++ "b/Strings/In operator/task.md" 2022-04-06 14:38:43.443951680 +0900
@@ -1,8 +1,8 @@
-## In operator
-
-If you want to check whether a string contains a specific letter or a substring, 
-you can use the `in` keyword.  
-  
-Check if there is `"ice"` in `"ice cream"` and assign the result to the variable `contains`.  
-
-<div class="hint">Use the <code>in</code> operator.</div>
+## In 演算子 :(In operator)
+
+文字列に特定の文字または部分文字列が含まれているかどうかを確認する場合は、`in` キーワードを使用できます。
+
+`"ice cream"`(アイスクリーム)に `"ice"`(アイス)があるかどうかを確認し、結果を変数 `contains` に割り当てます。
+
+<div class='hint'> <code>in</code> 演算子を使用します。</div>
+
diff -Naur "a/Strings/String formatting/task.md" "b/Strings/String formatting/task.md"
--- "a/Strings/String formatting/task.md"   2022-04-06 14:37:39.027011271 +0900
+++ "b/Strings/String formatting/task.md"   2022-04-06 14:38:43.463951971 +0900
@@ -1,19 +1,16 @@
-## String formatting
-
-The `%` operator after a string is used to combine the string with variables. 
-The `%` operator will replace `%s` in a string with the string variable that 
-comes after it. The `%d` special symbol is used as a placeholder for numeric 
-or decimal values.  
-
-> <i><b>Note</b>: The formatting operations described here exhibit a variety 
-> of quirks that lead to a number of common errors. 
-> Using the newer formatted string literals (see [further](course://Strings/F-strings)), 
-> the <code><a href="https://docs.python.org/3/library/stdtypes.html#str.format">str.format()</a></code> 
-> interface, or <a href="https://docs.python.org/3/library/string.html#template-strings">template strings</a> may help avoid these errors. 
-> Each of these alternatives provides their own trade-offs and benefits of 
-> simplicity, flexibility, and/or extensibility.</i>
-  
-Tell PyCharm how old you are (using digits).  
-
-<div class='hint'>Use the <code>%d</code> special symbol.</div>
-<div class='hint'>How old are you?</div>
+## 文字列のフォーマット :(String formatting)
+
+文字列の後の`%`演算子は、文字列を変数と組み合わせるために使用されます。  
+`%` 演算子は、文字列内の `%s` をその後に続く文字列変数に置き換えます。  
+`%d` 特殊記号は、数値または 10進値のプレースホルダーとして使用されます。
+
+> <i><b>注</b>: ここで説明する書式設定操作には、さまざまな癖があり、多くの一般的なエラーが発生します。
+> 新しい形式の文字列リテラル([さらに](course://Strings/F-strings) を参照)を使用して、<code><a href="https://docs.python.org/3/library/stdtypes.html#str.format">str.format()</a></code> インターフェース、
+> または <a href="https://docs.python.org/3/library/string.html#template-strings"> テンプレート文字列</a>は、これらのエラーを回避するのに役立つ場合があります。
+> これらの選択肢はそれぞれ、単純さ、柔軟性、および拡張性という独自のトレードオフと利点を提供します。</i>
+
+PyCharm にあなたが何歳かを伝えます(数字を使用)。
+
+<div class='hint'> <code>%d</code> 特殊記号を使用します。</div>
+<div class='hint'>あなたは何歳ですか?</div>
+
diff -Naur "a/Strings/String indexing/task.md" "b/Strings/String indexing/task.md"
--- "a/Strings/String indexing/task.md" 2022-04-06 14:37:39.003010920 +0900
+++ "b/Strings/String indexing/task.md" 2022-04-06 14:38:43.427951447 +0900
@@ -1,14 +1,17 @@
-## String indexing
-
-You can access a character in a string if you know its position. For example, 
-`str[index]` will yield the character at position `index` in the string `str`.
-Note that string indexing always starts at `0`. `index` raises `ValueError` 
-when `x` is not found in the string.
-
-Indices may also be negative numbers if you need to start counting from the right 
-(i.e., from the end of your string). 
-Note that since `-0` is the same as `0` , negative indices start from `-1`.  
-  
-Use the index operator to get the letter `"P"` from `"Python"` .  
-
-<div class="hint">Note that indices start with 0.</div>
+## 文字列のインデックス作成 :(String indexing)
+
+文字列の位置がわかっている場合は、文字列内の文字にアクセスできます。
+
+例えば、 `str[index]` は、文字列 `str` の位置 `index` にある文字を生成します。
+
+文字列のインデックス作成は常に `0` から始まることに注意してください。
+文字列に `x` が見つからない場合、`index` は `ValueError` を発生させます。
+
+右から(つまり、文字列の終わりから)カウントを開始する必要がある場合は、インデックスが負の数になることもあります。
+
+`-0` は `0` と同じであるため、負のインデックスは `-1` から始まることに注意してください。
+
+インデックス演算子を使用して、`"Python"` から文字 `"P"` を取得します。
+
+<div class='hint'>インデックスは 0 で始まることに注意してください。</div>
+
diff -Naur "a/Strings/String length/task.md" "b/Strings/String length/task.md"
--- "a/Strings/String length/task.md"   2022-04-06 14:37:39.015011095 +0900
+++ "b/Strings/String length/task.md"   2022-04-06 14:38:43.447951738 +0900
@@ -1,12 +1,11 @@
-## String length
-
-The `len()` method is used to count how many characters a string contains.  
-  
-Get the first half of the string stored in the variable `phrase`.  
-Note: when getting the index, remember about type conversion.  
-
-<div class='hint'>You need to obtain a slice of the string from its start  
-to the middle point.</div>
-
-<div class='hint'>Get the middle index by dividing the string length by 2. The 
-division result needs to be an integer.</div>
+## 文字列の長さ :(String length)
+
+`len()` メソッドは、文字列に含まれる文字数をカウントするために使用されます。
+
+変数 `phrase` に格納されている文字列の前半を取得します。
+注: インデックスを取得するときは、型変換について覚えておいてください。
+
+<div class='hint'>文字列の最初から中間点までのスライスを取得する必要があります。</div>
+
+<div class='hint'>文字列の長さを 2で割って、中間のインデックスを取得します。除算の結果は整数である必要があります。</div>
+
diff -Naur "a/Strings/String multiplication/task.md" "b/Strings/String multiplication/task.md"
--- "a/Strings/String multiplication/task.md"   2022-04-06 14:37:38.999010862 +0900
+++ "b/Strings/String multiplication/task.md"   2022-04-06 14:38:43.419951330 +0900
@@ -1,13 +1,13 @@
-## String multiplication
-
-Python also supports string-by-number multiplication (but not the other way around!).  
-  
-Use `not_yet_food` variable to get a food name stored in `food` 
-variable. 
-
-<div class="hint">
-
-`"cous"` repeated `2` times gives you `"couscous"`.
-</div>
-
-<div class='hint'>Use multiplication.</div>
+## 文字列の乗算 :(String multiplication)
+
+Python は、文字列ごとの乗算もサポートしています(ただし、その逆はサポートされていません)。
+
+`not_yet_food` 変数を使用して、`food` 変数に保存されている食品名を取得します。
+
+<div class='hint'>
+
+`"クス"`を`2`回繰り返すと`"クスクス"`になります。
+</div>
+
+<div class='hint'>乗算を使用します。</div>
+
diff -Naur "a/Strings/String negative indexing/task.md" "b/Strings/String negative indexing/task.md"
--- "a/Strings/String negative indexing/task.md"    2022-04-06 14:37:39.007010979 +0900
+++ "b/Strings/String negative indexing/task.md"    2022-04-06 14:38:43.431951505 +0900
@@ -1,8 +1,8 @@
-## String negative indexing
-
-As we said, you can use negative indices to count characters ‘backwards’ starting
-from the end of a string.  
-  
-Use a negative index to get the `'!'` sign from `long_string`.   
-
-<div class='hint'>Use a negative index.</div>
+## 文字列の負のインデックス :(String negative indexing)
+
+すでに述べたように、負のインデックスを使用して、文字列の末尾から「逆方向」に文字をカウントできます。
+
+負のインデックスを使用して、`long_string` から `'!'` 記号を取得します。
+
+<div class='hint'>負のインデックスを使用します。</div>
+
diff -Naur "a/Strings/String slicing/task.md" "b/Strings/String slicing/task.md"
--- "a/Strings/String slicing/task.md"  2022-04-06 14:37:39.011011037 +0900
+++ "b/Strings/String slicing/task.md"  2022-04-06 14:38:43.435951563 +0900
@@ -1,29 +1,32 @@
-## Slicing
-
-Slicing is used to extract multiple characters (a substring) from a string. 
-Its syntax is similar to that of indexing, but instead of just one index you use 
-two indices (numbers) separated by a colon, e.g., `str[ind1:ind2]`. These two 
-indices correspond to the start and the end of the substring. Note that the symbol 
-with the index `ind1` will be included, while the symbol with the index `ind2` – won't.
-
-Here's a visual on how slicing works in Python:
-
-```text
-+---+---+---+---+---+---+
-| P | y | t | h | o | n |
-+---+---+---+---+---+---+
-0   1   2   3   4   5   6
--6  -5  -4  -3  -2  -1
-```
-
-##### Example
-<pre><code>
-str[start:end] # items start through end-1
-str[start:]    # items start through the rest of the array
-str[:end]      # items from the beginning through end-1
-str[:]         # a copy of the whole array
-</code></pre>
-
-Use slicing to get `"Python"` from the `monty_python` variable.  
-
-<div class='hint'>You can leave one of the indices empty.</div>
+## スライス :(Slicing)
+
+スライスは、文字列から複数の文字(サブ文字列)を抽出するために使用されます。
+
+その構文はインデックス作成の構文と似ていますが、1つのインデックスの代わりに、コロンで区切られた 2つのインデックス(数値)を使用します。(例: `str[ind1:ind2]`)
+
+これらの 2つのインデックスは、部分文字列の開始と終了に対応します。
+インデックスが `ind1` のシンボルは含まれますが、インデックスが `ind2` のシンボルは含まれないことに注意してください。
+
+Pythonでスライスがどのように機能するかを視覚的に示します:
+
+
+```text
++---+---+---+---+---+---+
+| P | y | t | h | o | n |
++---+---+---+---+---+---+
+0   1   2   3   4   5   6
+-6  -5  -4  -3  -2  -1
+```
+
+##### 例:
+<pre><code>
+str[start:end] # アイテムは最初から最後-1まで
+str[start:]    # アイテムは配列の残りの部分から始まります
+str[:end]      # 最初から最後-1 までのアイテム
+str[:]         # 配列全体のコピー
+</code></pre>
+
+スライスを使用して、`monty_python` 変数から `"Python"` を取得します。
+
+<div class='hint'>インデックスの 1つを空のままにしておくことができます。</div>
+
diff -Naur "a/Variables/Arithmetic operators/task.md" "b/Variables/Arithmetic operators/task.md"
--- "a/Variables/Arithmetic operators/task.md"  2022-04-06 14:37:39.051011622 +0900
+++ "b/Variables/Arithmetic operators/task.md"  2022-04-06 14:38:43.503952554 +0900
@@ -1,40 +1,39 @@
-## Arithmetic operators
-
-Just as in any other programming language, the addition ( `+` ), subtraction ( `-` ), 
-multiplication ( `*` ), and division ( `/` ) operators can be used with numbers. In 
-addition, Python has the power ( `**` ),  modulo ( `%` ), and floor division ( `//` ) operators.
-
-- The `*` (multiplication) operator yields the product of its arguments. The arguments must 
-either both be numbers, or one argument must be an integer and the other – a sequence.
-  
-- The `/` (division) and `//` (floor division) operators yield the quotient of their arguments. 
-  Division of integers yields a float, while floor division of integers results in an integer.
-  
-- The `%` (modulo) operator yields the remainder of the division of the first argument by the second.
-
-- The `+` (addition) operator yields the sum of its arguments. The arguments must either both 
-  be numbers or both be sequences of the same type.
-  
-- The `-` (subtraction) operator yields the difference of its arguments.
-
-The binary arithmetic operations have the conventional priority levels. Note that 
-some of these operations also apply to certain non-numeric types.
-
-You can read more on this topic <a href="https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations">here</a>.
-### Task
- - Divide the value stored in `number` by `2`.
- - Calculate a remainder of such a division.
- - Multiply the division result by `2`.
- - Add the division remainder to the multiplication result.
- - Subtract the multiplication result from the number.
- - Perform a floor division of `number` by 2.
- - Raise the `multiplication_result` to the power of 3
-
-<div class='hint'>First, use the <code>/</code> operator.</div>
-<div class='hint'>Then use the <code>%</code> operator.</div>
-
-<div class='hint'>Then use the <code>*</code> operator.</div>
-
-<div class='hint'>Then use the <code>+</code> operator.</div>
-
-<div class='hint'>Then use the <code>-</code> operator.</div>
+## 算術演算子 :(Arithmetic operators)
+
+他のプログラミング言語と同じように、加算( `+` )、減算( `-` )、
+乗算( `*` )および除算( `/` )演算子は、数値とともに使用できます。
+さらに、Python には、累乗( `**` )、モジュロ( `%` )、およびフロア分割(`//` )演算子があります。
+
+- `*`(乗算)演算子は、その引数の積を生成します。
+引数は両方とも数値であるか、一方の引数が整数でもう一方がシーケンスである必要があります。
+
+- `/`(除算)および `//`(床除算)演算子は、引数の商を生成します。
+整数の除算はfloatを生成し、整数のフロア除算は整数を生成します。
+
+- `%`(モジュロ)演算子は、最初の引数を2番目の引数で除算した余りを返します。
+
+- `+`(加算)演算子は、その引数の合計を生成します。
+引数は、両方が数値であるか、両方が同じタイプのシーケンスである必要があります。
+
+- `-`(減算)演算子は、その引数の差を生成します。
+
+2進算術演算には、従来の優先度レベルがあります。
+これらの操作の一部は、特定の非数値タイプにも適用されることに注意してください。
+
+このトピックの詳細については、<a href="https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations">こちら</a>をご覧ください。
+
+### 課題
+- `number` に格納されている値を `2` で割ります。
+- そのような除算の余りを計算します。
+- 除算結果に `2` を掛けます。
+- 除算の余りを乗算結果に追加します。
+- 数値から乗算結果を減算します。
+- `number` を 2 でフロア分割します。
+- `multiplication_result` を 3 の累乗に上げます。
+
+<div class='hint'>まず、<code>/</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>%</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>*</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>+</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>-</code> 演算子を使用します。</div>
+
diff -Naur a/Variables/Assignments/task.md b/Variables/Assignments/task.md
--- a/Variables/Assignments/task.md 2022-04-06 14:37:39.055011680 +0900
+++ b/Variables/Assignments/task.md 2022-04-06 14:38:43.511952671 +0900
@@ -1,11 +1,12 @@
-## Assignments
-
-An augmented assignment is a single statement combining a binary operation and an 
-assignment statement, such as `+=`, `-=`, etc.  
-
-An augmented assignment expression like `x += 1` can be rewritten as `x = x + 1` to achieve a similar effect.
-You can read more about this <a href="https://docs.python.org/3/reference/simple_stmts.html#augmented-assignment-statements">here</a>.
-### Task
-Use an augmented assignment to add `5` to `number` and update the variable.  
-
-<div class='hint'>Use the <code>+=</code> operator.</div>
+## 割り当て :(Assignments)
+
+拡張代入は、二項演算と代入ステートメントを組み合わせた単一のステートメントです( `+=`、 `-=` など)。
+
+`x += 1` のような拡張代入式は、`x = x + 1` と書き直して、同様の効果を得ることができます。
+この <a href="https://docs.python.org/3/reference/simple_stmts.html#augmented-assignment-statements">こちら </a> について詳しく読むことができます。
+
+### 課題
+拡張代入を使用して `5` を `number` に追加し、変数を更新します。
+
+<div class='hint'> <code>+=</code> 演算子を使用します。</div>
+
diff -Naur "a/Variables/Boolean operators/task.md" "b/Variables/Boolean operators/task.md"
--- "a/Variables/Boolean operators/task.md" 2022-04-06 14:37:39.055011680 +0900
+++ "b/Variables/Boolean operators/task.md" 2022-04-06 14:38:43.515952729 +0900
@@ -1,16 +1,14 @@
-## Boolean operators
-
-Boolean is a type of value that can only be `True` or `False`. The `==` (equality) operator 
-compares two variables and checks whether they are equal.  
-
-### Task
- - Check whether the variable `two` is equal to `three`.
- - Check if the variable `is_equal` has a deceiving name.
- - Check if the variable `is_false` does indeed contain a lie.
-
-
-<div class='hint'>Use the <code>==</code> operator.</div>
-
-<div class='hint'>Use the <code>True</code> value.</div>
-
-<div class='hint'>Use the <code>False</code> value.</div>
+## ブール演算子 :(Boolean operators)
+
+ブール値は、`True`または`False`のみが可能な値のタイプです。
+ `==`(等式)演算子は 2つの変数を比較し、それらが等しいかどうかをチェックします。
+
+### 課題
+- 変数 `two` が `three` と等しいかどうかを確認します。
+- 変数 `is_equal` に不正な名前が付いているかどうかを確認します。
+- 変数 `is_false` に実際に嘘が含まれているかどうかを確認します。
+
+<div class='hint'> <code>==</code> 演算子を使用します。</div>
+<div class='hint'> <code>True</code> 値を使用します。</div>
+<div class='hint'> <code>False</code> 値を使用します。</div>
+
diff -Naur "a/Variables/Comparison operators/task.md" "b/Variables/Comparison operators/task.md"
--- "a/Variables/Comparison operators/task.md"  2022-04-06 14:37:39.063011797 +0900
+++ "b/Variables/Comparison operators/task.md"  2022-04-06 14:38:43.519952787 +0900
@@ -1,39 +1,38 @@
-## Comparison operators
-
-Python has many types of comparison operators, including: 
-- `<` less than
-  
-- `>` greater than 
-  
-- `==` equal 
-  
-- `>=` greater or equal
-  
-- `<=` less or equal
-  
-- `!=` not equal
-
-The operators  compare the values of two objects. The objects do not need 
-to have the same type.
-
-
-All comparison operations in Python have the same priority, which is lower than
-that of any arithmetic, shifting or bitwise operation. Comparisons yield boolean 
-values: either `True` or `False`. Comparisons can be chained arbitrarily, and 
-expressions like `a < b < c` have the 
-conventional mathematical meaning. Read more on comparisons <a href="https://docs.python.org/3/reference/expressions.html#comparisons">here</a>.
-### Task
- - Check whether the value of the variable `three` is strictly greater than the value of 
-the variable `two`.
- - Check whether the value of the variable `one` is strictly smaller than the value of
-   the variable `three`.
- - Check whether the value of the variable `three` is strictly greater than both the value of
-   the variable `two` and the value of the variable `one`.
- - Check if the variable `one` is not equal to the variable `two`.
- - Check if the variable `thee` equals itself.
-
-<div class='hint'>Use the <code>></code> operator.</div>
-<div class='hint'>Use the <code><</code> operator.</div>
-<div class='hint'>Use both the <code>></code> and the <code><</code> operators.</div>
-<div class='hint'>Use the <code>!=</code> operator.</div>
-<div class='hint'>Use the <code>==</code> operator.</div>
+## 比較演算子 :(Comparison operators)
+
+Python には、次のような多くの種類の比較演算子があります:
+
+- `<` 未満
+  
+- `>`  より大きい
+  
+- `==` 等しい
+  
+- `>=` 以上
+  
+- `<=` 以下
+  
+- `!=` 等しくない
+
+演算子は、2つのオブジェクトの値を比較します。
+オブジェクトは同じタイプである必要はありません。
+
+Python のすべての比較演算の優先度は同じであり、算術演算、シフト演算、またはビット演算の優先度よりも低くなっています。比較すると、ブール値(`True` または `False`)が生成されます。
+
+比較は任意に連鎖させることができ、`a <b <c` のような式は、従来の数学的意味を持っています。
+
+比較の詳細については、 <a href="https://docs.python.org/3/reference/expressions.html#comparisons">こちら</a> をご覧ください。
+
+### 課題
+- 変数 `three` の値が変数 `two` の値よりも厳密に大きいかどうかを確認します。
+- 変数 `one` の値が変数 `three` の値よりも厳密に小さいかどうかを確認します。
+- 変数 `three` の値が、変数 `two` の値と変数 `one` の値の両方よりも厳密に大きいかどうかを確認します。
+- 変数 `one` が変数 `two` と等しくないかどうかを確認します。
+- 変数 `thee` がそれ自体と等しいかどうかを確認します。
+
+<div class='hint'> <code>></code> 演算子を使用します。</div>
+<div class='hint'> <code><</code> 演算子を使用します。</div>
+<div class='hint'> <code>></code> 演算子と <code><</code> 演算子の両方を使用します。</div>
+<div class='hint'> <code>!=</code>演算子を使用します。 </div>
+<div class='hint'> <code>==</code> 演算子を使用します。</div>
+
diff -Naur "a/Variables/Type conversion/task.md" "b/Variables/Type conversion/task.md"
--- "a/Variables/Type conversion/task.md"   2022-04-06 14:37:39.043011505 +0900
+++ "b/Variables/Type conversion/task.md"   2022-04-06 14:38:43.495952438 +0900
@@ -1,10 +1,15 @@
-## Type conversion
-
-There are several built-in functions that let you convert one data type into another. 
-These functions return a new object representing the converted value. `int(x)` 
-converts `x` into an integer. `float(x)` converts `x` into a floating-point number. `str(x)` 
-converts object `x` into a string representation.  
-### Task
-Convert `float_number` into an integer.  
-
-<div class="hint">Use the <code>int()</code> function.</div>
+## 型変換 :(Type conversion)
+
+あるデータ型を別のデータ型に変換できる組み込み関数がいくつかあります。
+これらの関数は、変換された値を表す新しいオブジェクトを返します。
+
+`int(x)` は `x` を整数に変換します。
+`float(x)` は `x` を浮動小数点数に変換します。
+ `str(x)` は、オブジェクト `x` を文字列表現に変換します。
+
+### 課題
+
+`float_number` を整数に変換します。
+
+<div class='hint'> <code>int()</code> 関数を使用します。</div>
+
diff -Naur "a/Variables/Undefined variable/task.md" "b/Variables/Undefined variable/task.md"
--- "a/Variables/Undefined variable/task.md"    2022-04-06 14:37:39.039011446 +0900
+++ "b/Variables/Undefined variable/task.md"    2022-04-06 14:38:43.483952263 +0900
@@ -1,12 +1,39 @@
-## Undefined variable
-
-Variable names may only contain Latin letters, digits, and/or the underscore 
-character, and they cannot start with a digit. They also cannot be any of the 
-reserved <a href="https://docs.python.org/3/reference/lexical_analysis.html#keywords">keywords</a>.
-### Task
-Check what happens if you use a variable which is not defined yet. Run the code in the editor – try to print out an undefined name.  
-
-Note, that "check" command only runs the testing system, and you will not see the output.
-
-<div class="hint">Type the name of an undefined variable inside the brackets of the <code>print</code> statement. 
-Note that variable names must start with a letter and can contain only letters, '_', and numbers.</div>
+## 算術演算子 :(Arithmetic operators)
+
+他のプログラミング言語と同じように、加算( `+` )、減算( `-` )、
+乗算( `*` )および除算( `/` )演算子は、数値とともに使用できます。
+さらに、Python には、累乗( `**` )、モジュロ( `%` )、およびフロア分割(`//` )演算子があります。
+
+- `*`(乗算)演算子は、その引数の積を生成します。
+引数は両方とも数値であるか、一方の引数が整数でもう一方がシーケンスである必要があります。
+
+- `/`(除算)および `//`(床除算)演算子は、引数の商を生成します。
+整数の除算はfloatを生成し、整数のフロア除算は整数を生成します。
+
+- `%`(モジュロ)演算子は、最初の引数を 2番目の引数で除算した余りを返します。
+
+- `+`(加算)演算子は、その引数の合計を生成します。
+引数は、両方が数値であるか、両方が同じタイプのシーケンスである必要があります。
+
+- `-`(減算)演算子は、その引数の差を生成します。
+
+2進算術演算には、従来の優先度レベルがあります。
+これらの操作の一部は、特定の非数値タイプにも適用されることに注意してください。
+
+このトピックの詳細については、<a href="https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations">こちら</a>をご覧ください。
+
+### 課題
+- `number` に格納されている値を `2` で割ります。
+- そのような除算の余りを計算します。
+- 除算結果に `2` を掛けます。
+- 除算の余りを乗算結果に追加します。
+- 数値から乗算結果を減算します。
+- `number` を 2 でフロア分割します。
+- `multiplication_result` を 3 の累乗に上げます。
+
+<div class='hint'>まず、<code>/</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>%</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>*</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>+</code> 演算子を使用します。</div>
+<div class='hint'>次に、<code>-</code> 演算子を使用します。</div>
+
diff -Naur "a/Variables/Variable definition/task.md" "b/Variables/Variable definition/task.md"
--- "a/Variables/Variable definition/task.md"   2022-04-06 14:37:39.031011329 +0900
+++ "b/Variables/Variable definition/task.md"   2022-04-06 14:38:43.475952146 +0900
@@ -1,11 +1,13 @@
-## Variable definition
-
-Variables are used to store values so we can refer to them later. A variable 
-is like a label, and in Python we use the ' `=` ' symbol, known as the 
-assignment operator, to assign a value to a variable. An assignment can be 
-chained, e.g., `a = b = 2`.   
-### Task
- - Change the value stored in the variable `greetings`.
- - Use the chain assignment to store 2 in both `a` and `b`.
-
-<div class="hint">Type a new value in the answer placeholder.</div>
+## 変数の定義 :(Variable definition)
+
+変数は値を格納するために使用されるため、後で参照できます。
+変数はラベルのようなものであり、Python では、代入演算子と呼ばれる '` =`' 記号を使用して、変数に値を割り当てます。
+
+割り当ては連鎖させることができます。(例: `a = b = 2`)
+
+### 課題
+- 変数 `greetings` に格納されている値を変更します。
+- チェーン代入を使用して、`a` と `b` の両方に 2 を格納します。
+
+<div class='hint'>回答プレースホルダーに新しい値を入力します。</div>
+
diff -Naur "a/Variables/Variable types/task.md" "b/Variables/Variable types/task.md"
--- "a/Variables/Variable types/task.md"    2022-04-06 14:37:39.039011446 +0900
+++ "b/Variables/Variable types/task.md"    2022-04-06 14:38:43.487952321 +0900
@@ -1,28 +1,28 @@
-## Variable types
-
-All data in a Python program is represented by objects or by relations between 
-objects. Every object has an identity, a type, and a value. An object’s identity 
-never changes once it has been created; you may think of it as the object’s 
-address in memory.
-
-An object’s `type` determines the operations that it supports (e.g., 
-“does it have a length?”) and defines the possible values for objects of 
-that type. The `type()` function returns an object’s type (which is an object itself). 
-Like its identity, an object’s type is also unchangeable.
-
-The value of some objects can change. Objects whose value 
-can change are <i>mutable</i>; objects whose value is unchangeable once 
-they are created are called <i>immutable</i>.
-
-In Python, there are two main types of numbers: integers and floats. The most important 
-difference between them is that a `float` is a number that has a decimal point, 
-and an `int` is a number without a decimal point.  
-
-For more information on this topic, refer to the "<a href="https://docs.python.org/3/reference/datamodel.html#objects-values-and-types">Objects, values and types</a>"
-and "<a href="https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy">The standard type hierarchy</a>" sections in Python Documentation.
-
-### Task
-Print the type of the variable `float_number`.  
-
-<div class="hint">
-Check out how we determined the type of <code>number</code> on line 2 and do the same with <code>float_number</code>.</div>
+## 変数タイプ :(Variable types)
+
+Python プログラムのすべてのデータは、オブジェクトまたはオブジェクト間の関係によって表されます。
+
+すべてのオブジェクトには、ID、タイプ、および値があります。
+オブジェクトのID は、一度作成されると変更されることはありません。
+これは、メモリ内のオブジェクトのアドレスと考えることができます。
+
+オブジェクトの `type` は、サポートする操作を決定し(たとえば、「長さはありますか?」)、そのタイプのオブジェクトに可能な値を定義します。
+
+`type()` 関数は、オブジェクトの型(オブジェクト自体)を返します。
+そのアイデンティティと同様に、オブジェクトのタイプも変更できません。
+
+一部のオブジェクトの値は変更される可能性があります。
+値が変更される可能性のあるオブジェクトは <i>mutable</i>(可変)です。
+作成後に値が変更できないオブジェクトは <i>immutable</i>(不変)と呼ばれます。
+
+Python には、整数と浮動小数点数の 2つの主要なタイプの数値があります。
+それらの最も重要な違いは、`float` は小数点のある数値であり、`int` は小数点のない数値であることです。
+
+このトピックの詳細については、Python ドキュメントの "<a href="https://docs.python.org/3/reference/datamodel.html#objects-values-and-types">オブジェクト、値、およびタイプ</a>" と "<a href="https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy">標準の型階層</a>" のセクションを参照してください。
+
+### 課題
+変数 `float_number` の型を出力します。
+
+<div class='hint'>
+2行目の <code>number</code> のタイプをどのように決定したかを確認し、<code>float_number</code> でも同じことを行います。</div>
+

→連続して、すべて貼り付けてください。ファイルの最後に空行「+」があるのがパッチの最新版であることの目印です。

→その都度内容は改修されています。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- -----

C-4. 参考: (test2): パッチファイルの適用:

-

閲覧のみで、作業は要りません。

-

1). パッチファイルの適用:

$ cd ~/PycharmProjects/'Introduction to Python'/
$ patch -p1 < pycharm-ja.patch

→正常に完了すれば、「項番 A-2.の 1).」と同じメッセージが表示 されます。

-

-

2). 日本語化されたか確認:

-

(1). システムを再起動してから、「pycharm」を起動:

再起動させないと、キャッシュとメモリで相違があると表示される場合があります。 その場合はデフォルトの「システム(ディスク)からの読み込み」でOK

-

画面下のパネルの右にある「ギア」アイコンをクリック→「Toolbox」画面→「PyCharm Community」アイコンをクリック

→「PyCharm」で前回開いていた ファイル(タブ)が開きます。なので、学習コースの続きになります。

-

(2). 左の各項目の四角いアイコンの「課題名」をダブルクリック→翻訳が反映されます:

→再読込みされ、日本語で表示されました。

何かしらの修正を行ったら、再読込みが必要です。

-

(3). 日本語での学習が可能になりました

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- -

9. 参考: せっかく翻訳したので、貢献できないか検討:

-

コンテンツの翻訳なので、通常の国際化(ローカライズ)の文字列置換では無理があります

そのせいか、GitHub には「Translations」や「po」などの該当フォルダがありません。 プルリクエストでは、ソースのルートに「Translations」フォルダを作ってファイルを置くことになりそうです。

強引に思われそうですが、採用はなくてもフォーク先もあることで、GitHub にデータが残り、再利用はできそう。

-

1). 「プルリクエスト」の提案先:

jetbrains-academy/introduction_to_python

-

-


2). コミット時の「表題」:

'Translated the "Description" of "Introduction to Python" into Japanese'

和訳: 「Introduction to Python」(Python入門)の「説明」を日本語に翻訳

-

3). プルリクエストで登録した「コメント」の内容:

### description:
The explanation displayed is in English. I translated it into  
 Japanese to make it easier for people living in Japan to learn Python.

Once you have created a patch file, you can apply it to  
 other languages as well.

### Setup procedure:
Check the attached file "README.md".

---
### Attachment:
(1). "README.md" : Setup procedure.  
(2). "README-ja.md" : Setup procedure (Japanese version)  
(3). "screenshot-ja.jpg" : Screen using "Introduction to Python" translated into Japanese  
(4). "Delete-md-File.sh"  : Shell script that deletes the target file  
(5). "ja.patch"  : patch file:

-

その後、追加したコメント:

### Added description:

It is a patch that you do yourself after installation,   
 instead of applying PATCH to the source code as you normally do on "GitHub".

This is an option you can run when you want to see a content guide in your own language.

Doing this will translate only the tasks supported by PATCH in the installed content.

This is already mature (no major updates) "Introduction to Python" content,   
 so it's a viable way to do it.

→抜粋:

インストール後に自分で行うパッチです。
これは、自分の国の言語でコンテンツのガイドを見たいときに実行できる選択肢のひとつです。

-

-


4). 参考: 添付の「README-ja.md」にて、セットアップ手順を確認(日本語版):

$ cat Translations/README-ja.md

ブログ上でちゃんとMarkdown が表示されるように、手直ししています:

-

表題:

「Introduction to Python」(Python入門)コースの「説明」を日本語に翻訳しました:

-

説明:

表示される説明は英語です。
日本人が Python を学びやすいように、日本語に翻訳しました。

-


セットアップ手順:

-

1. 「PyCharm」に下記のプラグインをインストールしておきます:
  • 「Edu Tools」
  • 「Japanese Language Pack」

-

2. 「PyCharm」の「Courses」タブで「Introduction to Python」コースを選択し、「Start」をクリックします:

→「~/PycharmProjects/'Introduction to Python'/」フォルダが作成されます。

これはすでに行われているはずです。

-

3. 念のため、元のファイルを保存してください:
$ cp -r ~/PycharmProjects ~/PycharmProjects-ORG

-

4. 作業に使用するファイルを確認します:

次のフォルダに添付ファイルが置かれているとします:

$ cd ~/PycharmProjects/'Introduction to Python'/Translations/

$ ls -1
Delete-md-File.sh   ←(必要)
README-ja.md
README.md
ja.patch         ←(必要)
screenshot-ja.jpg

-

5. シェルスクリプトを実行可能に設定します:
$ chmod +x ./Delete-md-File.sh

-

6. 対象となるファイルを削除するシェルスクリプトを実行します:
$ cd ~/PycharmProjects/'Introduction to Python'/
$ ./Translations/Delete-md-File.sh

→パッチファイルを適用する際の以下のエラーを回避します:
"Hunk #1 FAILED at 1 (different line endings)."

および、新しいファイルにすることで、パッチを適用しやすくします。

-

7. パッチファイルを適用します:
$ patch -p1 <Translations/ja.patch

→新しい md ファイルが各ファイル階層に作成されます。

-

8. 開始して確認します:

→左側のツリーで課題名をダブルクリックすると、翻訳された説明が表示されます。

-


添付ファイル:

(1). 「README.md 」 : セットアップ手順。GitHub で表示される説明です
(2). 「README-ja.md 」 : セットアップ手順(日本語版) ←(現在、ブログで見ているファイル)
(3). 「screenshot-ja.jpg 」 : 「Introduction to Python」を日本語に翻訳した画面
(4). 「Delete-md-File.sh 」 : 対象となるファイルを事前に削除するシェルスクリプト
(5). 「ja.patch 」 : パッチファイル

-

-


5). 参考: 「screenshot-ja.jpg」の表示:

→「Introduction to Python」を日本語に翻訳した表示です。

すべてが日本語化されているわけではありませんが、日本語ガイドが表示されるだけで、学習しやすさは違います。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- --

10. 参考: プルリクエストしました:

-

パッチファイルが大きいのが目立ちます:

パッチファイルが大きいので、検証には時間が必要です。
言語ごとに翻訳が必要だと思っている人、もしくは日本人でないと、レビューされないかも。

-

基本的に(手順A)のやり方です。

-

プルリクエスト:

Translated the "Description" of "Introduction to Python" into Japanese #77

→右上の「Files changed(5)」タブをクリックすれば、添付ファイルの確認が(差分表示で)できます。

-

もしくは、フォーク先の「GitHub: FuRuYa7/introduction_to_python 」でも添付ファイルの確認ができます。

-

添付ファイルをダウンロードしたいときは、

ここ 」をクリック、保存して展開すれば、「Translations」フォルダの中にファイルはあります。 使用は自己責任です。

-

ダウンロードしたら、念の為に、チェックサムの確認をして下さい:
$ sha256sum introduction_to_python-develop.zip
880a08e92d147a4287de3814b739e6c42f28b769a71cb487bc7f4515c1916338  introduction_to_python-develop.zip

→結果が違うようなら使ってはダメです。改ざんのリスクがあります。

-

添付ファイルが置かれている位置は、「採用された時に置かれる位置」です:

今回、もしくは、採用されていないときは、GitHub からダウンロードして展開した後に、
「Translations」フォルダを同じ位置にコピーすれば、同じ環境になります:

例:

$ cp -r ~/ダウンロード/introduction_to_python-develop/Translations/ ~/PycharmProjects/'Introduction to Python'/

-

(手順A)のやり方で問題になるのは、

ソースの更新があったときに気付きにくいこと。更新の多いプログラムのソースファイル等には向きません。

(手順B)や(手順C)だと反映時にその部分でエラーするのでわかりますが、(手順A)だとすんなりと通って、強制的に旧バージョンの翻訳になります。

こちらの基本コースは、すでに固まっていて更新の少ないコンテンツなので問題ないだろうと判断しました。 更新でよくあるのがタイプミスの修正(typo)ですが、含めての翻訳になるので問題ありません。 わかりやすい翻訳かは翻訳者のスキル次第です。

-

(手順A)の利点は、

パッチ適用時のエラーも少く、サイズが小さくなるだけでなく、ほぼソースと同じ(差分ファイルだけど全部入り)なので、小さな修正なら直接パッチファイルをエディタで修正できます。「差分の行と行数の指定」を合わせて修正する必要はありますが、修正時の手間を省けます。また、必要ならソースファイルに戻すことも可能です。

-

-


まとめ

学習教材の「Introduction to Python」(Python の基本)にて、英語のままだと Python の学習が進まないので「Introduction to Python」の「課題の説明」部分を翻訳してみました。

翻訳量は多かったのですが、おかげで、学習しやすくなりました。

-

パッチの適用のしかたは、test1(手順B)→test2(手順C)→test3 (手順A)と必要に迫られて変更しました。

本当は最終的な(手順A)もしくは(プルリクエストの手順)だけにして投稿を小さくできましたが、(手順B)は通常のパッチ作成のときに行うやり方で、(手順C)はパッチ適用時のエラーの回避策になるので、残しました。

何かのときに参考になるかもしれません。

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-

「Lubuntu 22.04 LTS」に「PyCharm」をインストール〈H146-3〉

登録日: 2022-04-08 更新日: 2022-04-15

UEFI 立ち上げのPCに、安定版の「Xubuntu 20.04.4 LTS」をインストール設定 して使っています。

-

それをホストOS にして「VirtualBox」に、公開が近づいた「Lubuntu 22.04 LTS」の開発版(日々更新される Daily 版)をインストール しました。現在、Beta 版に移行しています。

-

今までインストールしたことがない、「Python」の開発環境 (IDE) であるコードエディタの「PyCharm」をインストールしてみました。その備忘録です。

-

-

ホストOS : Xubuntu 20.04.4 LTS

ゲストOS : Lubuntu 22.04 LTS   ←(今回の作業)

-

-

使用したPC は「ASUS Chromebox CN60 」で、 プロセッサは第4世代の「Intel Celeron 2955U 」です。UEFI 立ち上げです。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック

-

-


目次

-

以前の作業:

「Lubuntu 22.04 LTS」をVirtualBox にインストール〈H146〉

-

今回の作業:

1. VirtualBox のスナップショットを作成:

2. A. 通常版のPyCharm をインストール:

3. B. Python の学習環境として「PyCharm Edu」を「snap」でインストール :

4. C. Python の学習環境として「PyCharm Edu」をダウンロードしてインストール:

-

「まとめ へ」

-

「目次詳細 へ」

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -

「Lubuntu 22.04 LTS」にて:

-

今回インストールした「PyCharm」アプリ:

→テーマは「ダーク」を選び、「日本語化」プラグインで日本語化しています。

こちらの画面は、Python の学習用の「EduTools」プラグインで、「Python の基本コース」(プロジェクト)を開いているところです。惜しいかな日本語化されていません。

-


現在のバージョンを表示:

-

ホストOS : Xubuntu 20.04.4 LTS

2022-04-08 現在

カーネル:

$ uname -r
5.13.0-39-generic

リリース:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"

-

ゲストOS : Lubuntu 22.04 LTS

2022-04-08 現在

カーネル:

$ uname -r
5.15.0-25-generic

リリース:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu Jammy Jellyfish (development branch)"

→「Jellyfish」とはクラゲのことです。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --

1. 作業前に、VirtualBox のスナップショットを作成:

-

VirtualBox の場合、作業をする前にスナップショットを作成しておくと、やり直しが楽になるので安心です。

-

1). システム更新を行っておきます:
$ sudo apt update
$ sudo apt upgrade

-

2). スナップショットの作成:

手順は、「コチラ 」が参考になります。

タイトルバーにその名前は表示されるので、短い名前にするのがコツです。

-

今回は事前の作業の投稿番号の「H146-2」の名前にしました。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ---

2. 参考: Python のエディタ:

-

Python の開発でよく使われているエディタ:

-


1). Visual Studio Code(Microsoft)

インストール履歴:

Ubuntu 22.04 LTS:
CentOS 8.2:
Fedora 34:

→現在は、GPU オフでの起動は要りません。

-


2). Sublime Text(Jon Skinner)

インストールの参考: (Sublime Text 4)

Sublime Text 4 の日本語化とおすすめパッケージ

-

インストール履歴:(Sublime Text 3)

CentOS 8.2:
Manjaro Linux 20.1:

-


3). Atom(GitHub)

インストール履歴:

Fedora 32:

-


4). PyCharm(JetBrains)

インストール履歴:

Lubuntu 22.04 LTS:

-


5). mu-editor(Code with Mu)

インストール履歴:

Lubuntu 22.04 LTS:
CentOS 8.2:

-

-

参考: 使用するシステムや言語によって、テキストエディタのインデントの設定を行う必要があります:
  • Python」で推奨のインデントは「半角スペース 4個」で、「Tab」キーでのインデントではありません。

  • C++」で開発されている「Haiku」で推奨のインデントは「Tab」キーで、システムでルール化されています。

-

今回は、「PyCharm」について学んでみました。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----

3. インストールされているpython の確認:

-

Lubuntu 22.04 LTSのデフォルトの「python3.10」以外に、

前回作成した、下記のvenv 環境が使えます:

-

$ cd ~/MyPy39/
$ source ~/MyPy39/env39/bin/activate
(env39) ubn@ubn-box:~/MyPy39$

-

→事前に「Python 3.8.13」のビルド が必要です。

$ cd ~/MyPy38/
$ source ~/MyPy38/env38/bin/activate
(env38) ubn@ubn-box:~/MyPy38$

-


1). python の確認:

$ apt list python3.* | grep amd64
:
python3.10-dbg/jammy 3.10.4-3 amd64
python3.10-dev/jammy 3.10.4-3 amd64
python3.10-full/jammy 3.10.4-3 amd64
python3.10-minimal/jammy,now 3.10.4-3 amd64 [インストール済み、自動]
python3.10-nopie/jammy 3.10.4-3 amd64
python3.10-venv/jammy 3.10.4-3 amd64
python3.10/jammy,now 3.10.4-3 amd64 [インストール済み、自動]
python3.9-dbg/jammy 3.9.12-1 amd64
python3.9-dev/jammy,now 3.9.12-1 amd64 [インストール済み]
python3.9-full/jammy 3.9.12-1 amd64
python3.9-minimal/jammy,now 3.9.12-1 amd64 [インストール済み]
python3.9-venv/jammy,now 3.9.12-1 amd64 [インストール済み]
python3.9/jammy,now 3.9.12-1 amd64 [インストール済み]

→「python3.8」はリポジトリにありません。

-

$ apt list python3.* | grep インストール済み
:
python3.10-minimal/jammy,now 3.10.4-3 amd64 [インストール済み、自動]
python3.10/jammy,now 3.10.4-3 amd64 [インストール済み、自動]
python3.9-dev/jammy,now 3.9.12-1 amd64 [インストール済み]
python3.9-minimal/jammy,now 3.9.12-1 amd64 [インストール済み]
python3.9-venv/jammy,now 3.9.12-1 amd64 [インストール済み]
python3.9/jammy,now 3.9.12-1 amd64 [インストール済み]

→「python3.9」と「python3.10」がインストールされています。

$ python3

Python 3.10.4 (main, Apr  2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

→Ctrl+D で終了

-

$ python3 --version
Python 3.10.4

$ python3.10 --version
Python 3.10.4

→「python3」として「python3.10」がインストールされています。

-


2). pip の確認:

$ pip3 --version
pip 22.0.4 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)

$ pip3.9 --version
pip 22.0.4 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)

→「pip」は「pip3.9」がインストールされています。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - -----

4. PyCharm について

-

参考:

PyCharm をインストールする

-

1). PyCharm は、WindowsMacOSLinux で使える IDE(開発環境ツール)です:

GLIBC 2.14 以降」を含まない「RHEL6」や「CentOS6」などの一部の Linux ディストリビューションでは使用できません。

-

2). 「JetBrains ランタイム」は IDE に含まれているため(JRE 11 ベース)、PyCharm を実行するために Java をインストールする必要はありません。

-

3). 対応する Python

-


4). PyCharm の 3つのエディション(形態、製品):

-

(1).「PyCharm Professional」

フルスペックのPython IDE です。有料で、優れたツールと機能のセットを提供します。

デフォルトで WebStorm と DataGrip の機能があり、クラス最高のフロントエンドテクノロジーとデータベースをサポート。また、Python ウェブフレームワーク、データサイエンス、リモート開発、および Python プロファイラーもサポート。

-

(2).「PyCharm Community」

pure な、Python IDE です。オープンソースで無料です。

「純粋な Python」開発向けに設計されています。通常版と言えます。

-

(3).「PyCharm Edu

Python 向けの教育用のIDE です。オープンソースで無料です。

「Edu Tools」プラグインが最初からインストールされており、 Python によるプログラミングの学習、および教育用として活用できます。

-

エディションの比較:

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- -

A. 通常版の「PyCharm」をインストールしたい場合:

-

PyCharm のインストールには、「JetBrains Toolbox」ツールが便利です:

-

1).「JetBrains Toolbox」ツールについて:

Toolbox ツールは、JetBrains 製品をインストールするための推奨ツールです。

適切な IDE とバージョンでプロジェクトをすばやく開くことができます。

-

「JetBrains Toolbox」ツールのインストールには、スクリプトの「インストーラー」(jetbrains-toolbox-install.sh) が準備されています

-

参考:

jetbrains-toolbox-install の README.md

-


2). まずは「インストーラー」(jetbrains-toolbox-install.sh) のインストール:

-

(1). 「curl」のインストール:
$ sudo apt install curl
:
以下のパッケージが新たにインストールされます:
  curl

-

(2). 「インストーラー」のインストール:
$ sudo curl -fsSL https://raw.githubusercontent.com/nagygergo/jetbrains-toolbox-install/master/jetbrains-toolbox.sh | bash
:
Download complete!

Installing to /opt/jetbrains-toolbox

Done.

→最新バージョンの Toolbox アプリで tarball を自動的にダウンロード。推奨の「/opt」ディレクトリに展開して、 「/usr/local/bin」ディレクトリにシンボリックリンクを作成してくれます。

-

$ ls /opt/
jetbrains-toolbox

$ ls -l /opt/jetbrains-toolbox/
:
-rwxr-xr-x 1 root root 77770728  4月  4 17:58 jetbrains-toolbox
-rwxr-xr-x 1 root root       53  4月  7 08:32 jetbrains-toolbox.sh
$ ls -l /usr/local/bin/j*
lrwxrwxrwx 1 root root 43  4月  7 08:32 /usr/local/bin/jetbrains-toolbox -> /opt/jetbrains-toolbox/jetbrains-toolbox.sh

-


3).「jetbrains-toolbox」を実行:

-

(1). 端末から実行
$ jetbrains-toolbox
dlopen(): error loading libfuse.so.2

AppImages require FUSE to run. 
You might still be able to extract the contents of this AppImage 
if you run it with the --appimage-extract option. 
See https://github.com/AppImage/AppImageKit/wiki/FUSE 
for more information

→エラー: 実行に必要な共有ライブラリが見つからないようです。

Snap やFlatpak に近い(ホスト環境からアプリを隔離する)技術である、「AppImage」パッケージが使われているようです。

-

(2). 確認:
$ apt list libfuse*
:
libfuse-dev/jammy 2.9.9-5ubuntu3 amd64
libfuse-dev/jammy 2.9.9-5ubuntu3 i386
libfuse-perl/jammy 0.16.1+20180422git6becd92d7fce3fc411d7c-5build1 amd64
libfuse2/jammy 2.9.9-5ubuntu3 amd64
libfuse2/jammy 2.9.9-5ubuntu3 i386
libfuse3-3/jammy,now 3.10.5-1build1 amd64 [インストール済み、自動]
libfuse3-3/jammy 3.10.5-1build1 i386
libfuse3-dev/jammy 3.10.5-1build1 amd64
libfuse3-dev/jammy 3.10.5-1build1 i386
$ sudo find / -name libfuse.so.2
$

→インストールされていません。インストール済みの「libfuse3-3」ではダメみたい。

-

(3). 「libfuse2」のインストール:
$ sudo apt install libfuse2
:
以下のパッケージが新たにインストールされます:
  libfuse2
$ sudo find / -name libfuse.so.2
:
/usr/lib/x86_64-linux-gnu/libfuse.so.2

-

(4). 再び、「jetbrains-toolbox」を実行:
$ jetbrains-toolbox
$

→起動コマンドはすぐに終了。その後、

「Toolbox」ツール(JetBrains Toolbox)が(Web アプリとして)開きました。

-


4).「Toolbox」ツールの使用開始:

-

(1). 「Welcom to Toolbox App」画面

→「Continue」をクリック

-

(2). 「JETBRAINS USER AGREEMENT」(同意)

→「Accept License Agreement」をクリック

-

(3). 言語の選択:
「Configure」
Language:
English →「日本語」に変更

-

メニューが日本語表示に切り替わりました:
「構成」
言語:
日本語

-

(4). テーマの選択:
テーマ:
「ライト」/「ダーク」  →「ダーク」を選択

-

「Toolbox」ツールの画面が、黒い見た目に切り替わりました。

-

→「はじめる」をクリック

-

(5). 「ツールを知る」のチップスが表示:

ツールをクリックすると、その機能とサポート対象の言語、テクノロジーを確認できます。

→「了解」

-

(6). 「ツール」タブにて、JetBrains の「製品」の中から、選んでインストールできます:

PyCharm 関連:

  • PyCharm Professional」 : フルスペックの Python IDE で、有料
  • PyCharm Community」 : pure な、Python IDE で、無料
  • PyCharm Edu 」 : 教育用の Python IDE で、無料

-

各「インストール」ボタンにカーソルを持っていくと、製品のバージョン番号が表示。

-

(7). 今回は、「PyCharm Community」を選び、右の「インストール」をクリック

一覧の上にインストール状況が表示:

-

(8). 「インストール完了」ダイアログ表示:

→「了解」

-

(9). インストール済のツールが上段に表示されました:

インストール済みツール:
PyCharm Community
2021.3.3

-


5).「PyCharm」の使用開始:

-

(1). 「PyCharm」の起動:

「Welcom to PyCharm」画面にて、

インストール済みツール:

「PyCharm Community」のアイコンをクリック

-

最初の起動時は、

(2).「PyCharm User Agreement」画面が表示:

「I confirm that i have read and accept the terms of this User Agreement」(同意)にチェックして、

→「Continue」をクリック

-

(3).「DATA SHARING」画面が表示:

和訳:

データ共有

使用されている機能とプラグイン、ハードウェアとソフトウェアの構成、ファイルの種類に関する統計、プロジェクトごとのファイル数などに関する匿名データを送信することで、JetBrains が製品を改善するのを支援します。

→「Don't send」、または「Send Anonymous Statistics」のどちらかをクリック

-

(4).「Welcom to Pycharm」(PyCharm へようこそ)画面が開きました:

→「Pycharm Edu」版では、右下のガイドが表示されません。

-


6).「PyCharm」の起動のまとめ:

-

(1).「Toolbox」アプリを起動:
$ jetbrains-toolbox

-

(2).「Toolbox」画面が表示:

インストール済みツール:

「PyCharm Community」のアイコンをクリック

-

(3).「Welcom to PyCharm」画面が表示:

-


7). 「日本語言語パック」プラグインのインストール:

-

(1).「Plugins」タブ
(2). 上にある虫メガネの検索窓「Type / to see options」に "japan" と入力:

(3).「Japanese Language Pack」の「Install」ボタンクリック
(4).「PyCharm and Plugin Updates」ダイアログ表示

→「Restart」をクリック(アプリの再起動)

(5). 日本語化されました:

-


8). 参考: Python の学習を行う「EduTools」プラグインをインストール:

-

(1). 「Plugins」タブ
(2). 上にある虫メガネの検索窓「 / を入力するとオプションを表示します」に "edu" と入力
(3). 「Edu Tools」の「インストール」ボタンクリック

→「インストール完了」とかのメッセージはありません。「インストール」ボタンがグレー表示になるだけです。

(4). 「PyCharm」を再起動します
(5). 「My Courses」タブが追加されました:

→残念ながら、「Edu Tools」プラグインは日本語化されていません。

-

(6). 「Start New Course」をクリック

「Select Course」画面が表示:

一覧にある「Introduction to Python」を選んで、

→緑色の「Start」ボタンをクリック(プロジェクトの起動)

-

参考:(一部を抜粋)

貢献するには ? : このコースの「Git リポジトリ」にプルリクエストを送信してください:

jetbrains-academy/introduction_to_python

→オープンに課題の追加や改善を受け付けているようです。

-

(7). 「今日のヒント」が開きました:

→「閉じる」

-

(8).「PyCharm」が起動され、「Introduction to Python」プロジェクトが開かれました:

→メニューバーは日本語化されています。ただし、プロジェクトのガイドは英語のままです。

-


9). メニューから「PyCharm」を起動できないか確認:

$ sudo find / -name jetbra* | grep desktop
:
/home/ubn/.local/share/applications/jetbrains-pycharm-ce.desktop  ←(PyCharm 起動用)
/home/ubn/.local/share/applications/jetbrains-toolbox.desktop    ←(Toolbox 起動用)
/home/ubn/.config/autostart/jetbrains-toolbox.desktop  ←(Toolbox の自動起動用)

→どちらも起動用のデスクトップファイルがホームに置かれていました。

-

(1). 「Toolbox」起動用:
$ cat /home/ubn/.local/share/applications/jetbrains-toolbox.desktop
:
[Desktop Entry]
Icon=/home/ubn/.local/share/JetBrains/Toolbox/toolbox.svg
Exec=/home/ubn/.local/share/JetBrains/Toolbox/bin/jetbrains-toolbox %u
Version=1.0
Type=Application
Categories=Development
Name=JetBrains Toolbox
StartupWMClass=jetbrains-toolbox
Terminal=false
MimeType=x-scheme-handler/jetbrains;
X-GNOME-Autostart-enabled=true
StartupNotify=false
X-GNOME-Autostart-Delay=10
X-MATE-Autostart-Delay=10
X-KDE-autostart-after=panel

自動起動に登録されています。つまり「常駐」しています。システムトレイの右にある「ギア」アイコンがそれみたい。

ちなみに、「/home/ubn/」は自分のホームフォルダ名になります。

-

(2). 「PyCharm」起動用:
$ cat /home/ubn/.local/share/applications/jetbrains-pycharm-ce.desktop
:
[Desktop Entry]
Name=PyCharm Community
Icon=/home/ubn/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/.icon.svg
StartupWMClass=jetbrains-pycharm-ce
Comment=The pure Python IDE
Exec="/home/ubn/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/213.7172.26/bin/pycharm.sh" %u
Version=1.0
Type=Application
Categories=Development;IDE;
Terminal=false
StartupNotify=true

→こちらのファイルを「/usr/share/applications/」にコピーして、メニューから起動しても良いのですが、 すでに「Toolbox」が常駐しているので、そこから起動することにしました。

-


10). 「PyCharm」の起動のやり方:

-

画面下パネルの右の「ギア」アイコンをクリック→「Toolbox」画面→「PyCharm Community」をクリック

-

ちなみに、「Toolbox」画面を閉じるために終了しても、常駐は解除されないので安心してください。

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- --

B. Python の学習環境として「PyCharm Edu」を「snap」でインストールしたい場合:

-

Ubuntu の場合は、snap パッケージでインストールできます:

$ sudo snap install pycharm-educational --classic

→こちらが一番簡単にインストールできるかも。

-

日本語化:

日本語言語パック(プラグイン)のインストールでメニューの日本語化は出来そうですが、未確認

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ---

C. Python の学習環境として「PyCharm Edu」をダウンロードしてインストールしたい場合:

-

まだ「PyCharm」をインストールしていない場合に、

Python の学習に使うのが目的なら、これだけで(「PyCharm」+「Edu Tools」プラグイン)が同時にインストールでき、省力化?になります。(もしかしたら「項番 A」の方が省力化されているかも)

完全に同じ状態なのかは未確認なので、プログラム開発もしたい場合は「項番 A」が無難かも。

-

ただし、"「Learner」: 学習者 / 「Educator」: 教育者 " のダイアログを聞いてくるのは、このイメージの場合のみなので、進捗を管理できたりとか、教育現場向けの何かのしかけが特別にあるのかもしれません。

-

1). ダウンロード: サイトを開きます

-

2). 「.tar.gz」を選んだ状態で、「ダウンロード 」ボタンをクリック

管理しやすいように「~/ダウンロード/pycharm-edu/」フォルダを作成して、移動

-

3). SHA-256 チェックサムの確認:

SHA-256 チェックサム でファイル名と値を確認:

$ cd ~/ダウンロード/pycharm-edu/

$ sha256sum pycharm-edu-2021.3.4.tar.gz
4d348a57a8883b32d4ba92fb70e7e9ec4257afcd029ea02522a2679edae7a484  pycharm-edu-2021.3.4.tar.gz

→表示される値が同じことを確認。ファイル名が変わると値も変わるので注意。

-

4). 「pycharm-edu-*.tar.gz」ファイルを空のフォルダに展開:

「/opt/pycharm-edu」フォルダにインストールすることにしました:

-

インストール先に空のフォルダを作成:

$ sudo rm -r /opt/pycharm-edu
$ sudo mkdir -p /opt/pycharm-edu

インストール先に展開:

$ cd ~/ダウンロード/pycharm-edu/
$ sudo tar -xzf pycharm-edu-*.tar.gz -C /opt/pycharm-edu/

→しばらく待ちます。

確認:

$ cd /opt/pycharm-edu/

$ ls
pycharm-edu-2021.3.4

$ ls -1 pycharm-edu-2021.3.4/
Install-Linux-tar.txt
bin
build.txt
help
jbr
lib
license
plugins
product-info.json

-

5). インストール手順の確認:

さっと目を通すだけでOK

$ cd /opt/pycharm-edu/
$ cat pycharm-edu-2021.3.4/Install-Linux-tar.txt

抜粋(和訳):

PyCharm

インストール手順
===============================================================================

  1. ダウンロードしたPyCharm の配布アーカイブをプログラムをインストールしたい場所に解凍します。

この場所を「インストールホーム {installationhome}」と呼びます。 

  2. アプリケーションを起動するには、コンソールを開き、「cd {installationhome}/bin」として、
次のように入力します。

       ./pycharm.sh

    これにより、構成ディレクトリ内のさまざまな設定ファイルが初期化されます。

    「~/.config/JetBrains/PyCharmEdu2021.3.」

  3. [オプション] PATH 環境変数に「{installationhome}/bin」を追加して、任意のディレクトリからPyCharm を起動できるようにします。 

  4. [オプション] JVM ヒープサイズの値を調整するには、ファイル「pycharm.vmoptions」を作成します
(または64ビットJDK を使用している場合は「pycharm64.vmoptions」)構成ディレクトリ
-Xms および-Xmx パラメーターを設定します。

これのやり方を確認するには、
「{installationhome}/bin」の下にあるvmoptions ファイルをモデルとして参照できます。
もしくは、変更せずに、オプションを新しいファイルに追加してください。

-

[オプション]「config」および「system」ディレクトリの場所を変更します
  ------------------------------------------------------------------------------

デフォルトでは、PyCharm はすべての設定を「~/.config/JetBrains/PyCharmEdu2021.3」ディレクトリに保存し、

「~/.local/share/JetBrains/PyCharmEdu2021.3」をデータキャッシュとして使用します。

   これらのディレクトリの場所を変更するには: 
 
  1. コンソールを開き、「cd ~/.config/JetBrains/PyCharmEdu2021.3」

  2. ファイル「idea.properties」を作成し、「idea.system.path」変数と「idea.config.path」変数を設定します。

    例を示します:

     idea.system.path=~/custom/system
     idea.config.path=~/custom/config

    注:データキャッシュ(「system」ディレクトリ)は、1GB 以上の空き容量のあるディスクに保存してください。

-

6).「pycharm.sh」を実行:

$ cd /opt/pycharm-edu/pycharm-edu-2021.3.4/bin/
$ ls
brokenPlugins.db  icons.db         libdbm64.so  printenv.py  pycharm.svg          restart.py
format.sh         idea.properties  log.xml      pycharm.png  pycharm64.vmoptions
fsnotifier        inspect.sh       ltedit.sh    pycharm.sh   repair

実行:

$ ./pycharm.sh

-

「JetBrains Privacy Policy」画面が表示:

「I confirm that I habe read and accept the terms of this User Agreement」(契約の条件を読み、同意)にチェック

→「Continue」(続く)

-

匿名の統計を送信するか?」の画面表示:

DATA SHARING
Help JetBrains improve its products by sending anonymous data about features and plugins used, hardware and software configuration, statistics on types of files, number of files per project, etc. Please note that this will not include personal data or any sensitive information, such as source code, file names, etc. The data sent complies with the JetBrains Privacy Policy.
Data sharing preferences apply to all installed JetBrains products.
You can always change this behavior in Settings | Appearance & Behavior | System Settings | Data Sharing.

データ共有

匿名データを送信することで、JetBrains が製品を改善するのを支援します。

→任意:「Don't Send」(送信しない)、「Send Anonymous Statistics」(匿名の統計を送信)

「PyCharm Edu」のダイアログが表示:

「Are you a Learner or an Educator?」:あなたは学習者ですか、それとも教育者ですか?

「Learner」: 学習者 
「Educator」: 教育者

→「Learner」をクリック

→「Start using Edu Tools」(Eduツールの使用を開始する)をクリック

-

「Welcome to PyCharm」画面が表示:

-

-「Projects」タブ:

Create a new project to start from scratch.
Open existing project from disk or version control

和訳:

新しいプロジェクトを作成して、最初から始めます。 ディスクまたはバージョン管理から既存のプロジェクトを開く

-

-「Customize」タブ:

-「Plugins」タブ:

-「Learn Pycharm」タブ:

-「My Courses」タブ:

→先に日本語化した方が使いやすそう。

右上の「x」で閉じました。

-

7). 動作が確認できたら、「bin」にパスを通しました:

作業前の確認:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

実行:

$ echo 'PATH=$PATH:/opt/pycharm-edu/pycharm-edu-2021.3.4/bin' >> ~/.bashrc && source ~/.bashrc

-

再起動

確認:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/pycharm-edu/pycharm-edu-2021.3.4/bin

-

実行:

$ cd
$ pycharm.sh

→起動されました。

-

うまく動かない場合:

$ featherpad ~/.bashrc

→ファイルの最後に追加した行を修正してみます。

-


8). 日本語言語パック(プラグイン)のインストール:

-

(1).「Plugins」タブ
(2). 上にある虫メガネの検索窓「Type / to see options」に "japan" と入力
(3).「Japanese Language Pack」の「Install」ボタンクリック
(4).「PyCharm and Plugin Updates」ダイアログ表示

→「Restart」をクリック(アプリの再起動)

(5). メニューバー等が日本語化されました:

-


9). PyCharm にて、Python の学習コースを選ぶ:

-

(1).「My Courses」タブを開く:

Learn to Program   プログラムすることを学ぶ

Choose out of 20 curated and 100 community courses
Kotlin, Java, Python and other programming languages.

Learn more      もっと詳しく知る→「コースに参加する」やり方をブラウザ表示
Start New Course   新しいコースを開始
More actions     その他のアクション

→「Start New Course」をクリック

→「Select Course」画面:

デフォルトは、「Introduction to Python」(Pythonの紹介)が選ばれています。

→緑色の「Start」ボタン

「PyCharm」で課題のファイルが開かれました:

-

右に「Description」(説明)タブ:

→左のツリーでコースの課題(ファイル)を選んで、右下の「Run」で実行できるみたい。

  • 英語なので、個人的には、辛いところ。

-


(2). コースの紹介:

Python Logo

-

→変数からモジュールやパッケージまで、Python の基礎を学習します。

-

  • Algorithmic Toolbox

→計算問題を解く練習を行い、基本のアルゴリズム技術を学習します。

-

  • JetBrains Academy Python トラック

→アプリケーションを作成して、Python を基礎から学習するか、身に着けたスキルをさらに開発します。

-


10). PyCharm の学習:

ナレッジベース

-

-


--- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - --- - ----- ----

補足: 手動でインストールする場合の情報(抜粋):

-


1). Python の学習に使う「PyCharm Edu」プラグインについて:

-

参考:

「Edu Tools」プラグインのページ:

-

「EduTools」プラグインをインストールするには:
[Settings/Preferences] ダイアログの Ctrl+Alt+S で、[プラグイン] を選択します。

[Plugins](プラグイン)ダイアログで、[Marketplace](マーケットプレイス)タブに切り替えます。

開いたダイアログで、「EduTools」を検索します。

[インストール] をクリックします。

[設定] ダイアログで[OK] をクリックして変更を適用し、プロンプトが表示されたら再起動します。

-

インストールされている「EduTools」プラグインを更新するには:
[設定/設定]ダイアログのCtrl+Alt + Sで、[プラグイン]を選択します。

[プラグイン]ダイアログで、[更新] タブに切り替えます。

EduTools プラグインの更新が必要かどうかを確認します。

[更新] をクリックします。

[設定] ダイアログで[OK]をクリックして変更を適用し、プロンプトが表示されたら再起動します。

-

「EduTools」プラグインをアンインストールするには:

ヒント: 名前の右側にあるチェックボックスをオフにすることで、「EduTools」プラグインをいつでも無効にできます。

-

[Settings/Preferences] ダイアログの Ctrl+Alt+S で、[プラグイン] を選択します。

[インストール済み] タブで、EduToolsを検索します。

Edu Tools プラグインを右クリックし、[アンインストール] を選択します。

[設定] ダイアログで[OK] をクリックして変更を適用し、プロンプトが表示されたらIntelliJIDEA を再起動します。

-

「PyCharm」を日本語化しても、学習に使う「My Courses」タブは日本語化されません。

つまり、「EduTools」プラグイン(というか、課題のファイル)は日本語化されていません。

-

-


2). 参考: 「インストーラー」(jetbrains-toolbox-install.sh) について

jetbrains-toolbox-install

「JetBrainsToolbox」アプリのインストーラー(シェルスクリプト)です。

JetBrains 製品をインストールするためのベンダー推奨ツールです。

-

次の手順を自動化します。

  1. 「Toolboxアプリ」のWeb ページから最新の「tarball.tar.gz」をダウンロードします。
  2. tarball を推奨される「/opt/jetbrains-toolbox」ディレクトリに展開します
  3. 「/usr/local/bin」ディレクトリにシンボリックリンクを作成します

「jetbrains-toolbox.sh」のダウンロード:

https://github.com/nagygergo/jetbrains-toolbox-install/archive/refs/heads/master.zip

-

-


3). 参考: 手動で「JetBrains Toolbox」アプリをインストールしたい場合:

インストール先を、推奨される「/opt/jetbrains-toolbox」ディレクトリ以外に変更したいときに作業します。

-

(1). Toolbox App のサイトを開きます。

-

(2). Linux の場合は、「.tar.gz」を選んだ状態で、「ダウンロード」ボタンをクリック

「~/ダウンロード/jetbrains-toolbox-1.23.11680.tar.gz」

-

(3). チェックサムの確認:
$ cd ~/ダウンロード/

$ sha256sum jetbrains-toolbox-1.23.11680.tar.gz
cc5738982be5c7d3a330966b76e50c7d0aa8e97019878ab1e18de588fdd6f72c  jetbrains-toolbox-1.23.11680.tar.gz

→値が同じか確認。ファイル名が変わると値は変わります:

-

最新のファイル名とチェックサムの値

-

(4). ファイルの実行をサポートするディレクトリ(推奨: /opt)に tarball を展開します。

ここで、インストール先である「/opt」を変更できます:

$ cd ~/ダウンロード/
$ sudo tar -xzf jetbrains-toolbox-1.23.11680.tar.gz -C /opt

-

(5). 展開したディレクトリから「jetbrains-toolbox」バイナリを実行

-

(6). 「JetBrains Toolbox」アプリを実行

-

(7). インストールする製品とバージョンを選択します。

初めて Toolbox アプリを実行すると、自動的にメインメニューにToolbox アプリのアイコンが追加されます。

Toolbox アプリから JetBrains アカウントにログインすると、インストールしたすべての IDE で利用可能なライセンスが自動的に有効になります。

-

-


4). 参考: 「PyCharm Community」を手動でインストールする場合:

-

(1). ダウンロード: サイトを開きます

-

(2). Community の ダウンロード をクリック

-

(3). ダウンロードしたファイルを解凍して、インストール手順を確認します。

「項番8」の「PyCharm Edu」の手順が参考になります。ファイル名が変わります。

-

-


5). 参考: 有料版の「PyCharm Professional」を手動でインストールする場合:

-

通常は、「インストーラー」でインストールした「jetbrains-toolbox」から「PyCharm Professional」のインストールは出来るので、こちらの作業は要りません。

-

(1). ダウンロード: サイトを開きます

-

(2). Professional(無料30日間 体験版)の ダウンロード をクリック

-

(3). ダウンロードしたファイルを解凍して、インストール手順を確認します。

「PyCharm Edu」の手順 が参考になると思います。ファイル名は違うかもしれません。

-

-


まとめ

Python の学習目的で「PyCharm」をインストールしてみました。 単なるエディタとしても、学習環境としても使え、便利です。

学習課題が日本語化されていないのが、惜しいところ。英語だと基本的なことすら学習するのは難しいと思います。

プログラムというよりもコンテンツ(説明部分)の日本語化になるので、アプリの国際化の手法でなく、単にファイルを作成し直すことになりそうです。

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-