Skip to content

Commit 44fce36

Browse files
authored
Merge branch 'main' into refactor/preface-fix
2 parents a2d38ed + df058e0 commit 44fce36

17 files changed

Lines changed: 469 additions & 34 deletions

File tree

docs/.vitepress/config.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import { head } from './ga-plugin';
1111
// https://vitepress.dev/reference/site-config
1212

1313
export default withMermaid({
14-
title: "pg-basic text",
14+
title: "プログラミング基礎講習会",
1515
description: "プログラミング基礎講習会テキスト",
16-
cleanUrls: false,
16+
cleanUrls: true,
1717
markdown: {
1818

1919
// lineNumbers: true,
@@ -34,11 +34,14 @@ export default withMermaid({
3434
},
3535
nav: [
3636
{ text: 'ホーム', link: '/' },
37-
{ text: 'テキスト', link: '/text/chapter-0/' }
3837
],
3938

4039
sidebar: {
4140
'/cpp/': [
41+
{
42+
text: '2025年度版テキスト',
43+
link: '/text/chapter-0/',
44+
},
4245
{
4346
text: 'はじめに',
4447
link: '/cpp/preface/',
@@ -55,8 +58,29 @@ export default withMermaid({
5558
{ text: '1-B. Windowsの環境構築', link: '/cpp/chapter-1/1-B' },
5659
]
5760
},
61+
{
62+
text: '2. はじめてのプログラミング',
63+
link: '/cpp/chapter-2/',
64+
items: [
65+
{ text: '2.1 プログラミングの基礎知識', link: '/cpp/chapter-2/1' },
66+
{ text: '2.2 作業環境の構築', link: '/cpp/chapter-2/2' },
67+
{ text: '2.3 はじめてのプログラミング', link: '/cpp/chapter-2/3' },
68+
{
69+
text: '練習問題',
70+
link: '/cpp/chapter-2/problems/',
71+
collapsed: true,
72+
items: [
73+
{ text: '2-Q1. Hello, Shell!', link: '/cpp/chapter-2/problems/hello-shell' },
74+
],
75+
},
76+
]
77+
},
5878
],
5979
'/text/': [
80+
{
81+
text: '2026年度版テキスト [WIP]',
82+
link: '/cpp/preface/',
83+
},
6084
{
6185
text: 'About',
6286
items: [
@@ -238,6 +262,9 @@ export default withMermaid({
238262
]
239263
},
240264
head: [
265+
['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }],
266+
['link', { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }],
267+
['link', { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500;700&display=swap' }],
241268
[
242269
'script',
243270
{
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<script setup lang="ts">
2+
import { computed } from 'vue'
3+
import { useData, useRoute } from 'vitepress'
4+
import type { DefaultTheme } from 'vitepress'
5+
6+
const { theme } = useData()
7+
const route = useRoute()
8+
9+
function normalize(path: string): string {
10+
return path.replace(/\/$/, '')
11+
}
12+
13+
function findInItems(items: DefaultTheme.SidebarItem[], path: string): boolean {
14+
return items.some(item => {
15+
if (normalize(item.link ?? '') === path) return true
16+
if (item.items) return findInItems(item.items, path)
17+
return false
18+
})
19+
}
20+
21+
const chapterTitle = computed(() => {
22+
const path = normalize(route.path)
23+
const sidebar = theme.value.sidebar as Record<string, DefaultTheme.SidebarItem[]>
24+
25+
const sidebarKey = Object.keys(sidebar).find(key =>
26+
path.startsWith(normalize(key))
27+
)
28+
if (!sidebarKey) return null
29+
30+
for (const section of sidebar[sidebarKey]) {
31+
if (!section.items) continue
32+
if (findInItems(section.items, path)) return section.text
33+
}
34+
return null
35+
})
36+
</script>
37+
38+
<template>
39+
<p v-if="chapterTitle" class="chapter-title">{{ chapterTitle }}</p>
40+
</template>
41+
42+
<style scoped>
43+
.chapter-title {
44+
font-size: 0.85em;
45+
font-weight: 500;
46+
color: var(--vp-c-brand-1);
47+
margin: 0 0 0.25rem;
48+
}
49+
</style>

docs/.vitepress/theme/custom.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
@import "kiso.css";
2+
3+
:root {
4+
--vp-font-family-base: 'Noto Sans JP', 'Inter', ui-sans-serif, system-ui, sans-serif;
5+
}
6+
17
mjx-container.MathJax svg {
28
display: inline;
39
}

docs/.vitepress/theme/index.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
1+
/// <reference types="vite/client" />
2+
import { h } from 'vue'
13
import DefaultTheme from "vitepress/theme";
4+
import ChapterTitle from './ChapterTitle.vue'
25

36
import './custom.css'
47

5-
export default DefaultTheme
8+
export default {
9+
extends: DefaultTheme,
10+
Layout() {
11+
return h(DefaultTheme.Layout, null, {
12+
'doc-before': () => h(ChapterTitle),
13+
})
14+
},
15+
}

docs/cpp/chapter-2/1.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,44 @@
22

33
## 2.1.1 プログラミングとは
44

5-
## 2.1.2 OSとは
5+
プログラミングとは「コンピューターにどのような動作をさせるかを予め指示する行為」である。ここでいうコンピューターは、我々が今使っているノートパソコンだけではなく、TSUBAME のようなサーバーなどや、電子レンジ等の中に入っている制御装置(残り何分かを表示したり、どのボタンを押したかで動作を変えたり)も指し示す。
6+
7+
コンピューターは、私達よりもずっと速く、そして正確に計算することができるが、人間の言語を理解できない。人間の言語は思っているよりも曖昧であり、一方コンピューターはすべて0と1の2進数によって動作し厳密に指示を与えなければならない。
8+
そのコンピューターが理解できる形で指示するために、プログラミングをするのである。
9+
10+
::: tip
11+
プログラミング"言語"というものは様々あって、「C++」はその中の一つである。他にも「Python」「JavaScript」「C#」など言語がある中で今回C\++を選んでいる理由は2つ。
12+
13+
1. 大抵の言語はC++の(もっと言えばCの)派生だから。C\++で一通りプログラミングを勉強してしまえば、C#など他の言語にすぐに乗り換えられます。
14+
2. C++が比較的コンピュータ寄りだから。
15+
16+
:::
17+
18+
## 2.1.2 コンパイルとは
19+
20+
先述した通り、コンピューターは2進数によって動作する。よって与える命令も2進数でできるだけコンピューターでの動作に特化した形式になっている(「機械語」の形になっている)のだが、これを人間が読むことは困難である。よって比較的わかりやすく、かつ機械語に変換できる言語としてプログラミング言語を用いる。
21+
22+
プログラミング言語によって記述されたプログラムは、コンピューターが直接命令として理解できる形ではなく、よってコンピューターが読める形に変換しなければならない。
23+
この操作を「コンパイル」と呼び、コンパイルによって生成された01からなるデータ(バイナリ)をコンピューターは読み込む。
24+
25+
```mermaid
26+
flowchart LR
27+
th("人間の考えていること") --> |"プログラミング"| pg("プログラミング言語")
28+
pg --> |"コンパイル"| mc("バイナリ(機械語)")
29+
mc --> |"命令"| cp("コンピューター")
30+
```
31+
32+
## 2.1.3 OSとは
33+
34+
OS は、Operating System の略。この講習会中では、上のグラフの「機械語」を読み取って、コンピューターを実際に動かす部分を担当している。他にも、ユーザーの様々な操作(画面上のポインタを動かす、キーボードの入力を受け付けて適切に情報を分配する、HDD/SDD を操作する、などなど…)とコンピューターをつなぐ役割を果たす。
35+
36+
Windows / Mac (Macintosh) は主要な OS である。受講者の大半はこのどちらかのOSを使用しているだろう。
37+
38+
他にも、開発においてよく使用される OS として **Linux** が存在し、いくつかの班では Linux を用いて作業する。
39+
40+
Mac OS は Linux に「近い」(初学者である間は Linux の一種だと思っても良い)が、Windows は Linux とは大きく異なる OS
41+
なので、Windows ユーザーはよく **WSL** を使用する。
42+
WSL は **Windows Subsystem for Linux** の略。コンピューターの内部に、仮想的な Linux のコンピューターが入ってると考えると良い。
43+
44+
Ubuntu は、Linux ディストリビューションの一つで、Linux のカスタマイズみたいなものである。
645

7-
## 2.1.3 コンパイルとは

docs/cpp/chapter-2/2.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,77 @@
22

33
## 2.2.1 はじめてのターミナル
44

5+
まずはターミナルを開いてみよう。黒い画面に白い文字(Mac では白い画面に黒い文字)が出ていて、ここにコマンドを打ち込むことでコンピューターを直接操作することができる。
6+
試しに `echo "Hello"` と打ち込んで改行すると、`Hello`が出力される。 `echo` は、次に与えられた文字列をそのまま出力するコマンドである。
7+
8+
Windows においては、 WSL のターミナルを用いて Linux を操作することができ、Mac においてはターミナルを用いてコンピューターを操作する事ができる。
9+
Windowsの環境構築で少し出てきた 「PowerShell」は Windows を操作するイメージ。
10+
11+
::: tip
12+
`echo` は「こだま・反響」
13+
:::
14+
15+
1. 「ターミナル」を起動する
16+
2. `echo "Hello"` と入力する
17+
3. `Hello` という行が表示されていればOK
18+
19+
![](https://md.trap.jp/uploads/upload_8550a6882b611e212c99ef7b78187cb6.png)
20+
21+
自分の画面とはおそらく違うだろうが、概ねこのような風に `Hello` が表示されれば問題ない。
22+
523
## 2.2.2 ディレクトリとは
624

25+
ディレクトリは、エクスプローラー(Windows)/Finder (Mac)で「フォルダ」に相当するものである。ターミナルは常にどこかのディレクトリ上に居るものとして振る舞う。
26+
Finder/エクスプローラーと見比べながら、コマンドを打ち込んで理解しよう。
27+
28+
### ターミナルでの操作
29+
30+
1. ターミナルを開く
31+
2. `pwd` で、現在の自分の場所がわかる
32+
3. `ls` で、今居るディレクトリにあるファイル一覧が表示される(最初はほぼないはず!)
33+
34+
#### エクスプローラー(Windows)
35+
36+
エクスプローラーを起動すると、自分のコンピューターに保存されているファイルを一覧することができる。
37+
38+
1. エクスプローラーの「表示」をタップ
39+
![](./fig-1.png)
40+
41+
2. 「ファイル名拡張子」にチェックを入れる
42+
43+
3. サイドバーに「Linux」があるので、それをダブルクリックする。
44+
![](./fig-2.png)
45+
4. 「Ubuntu」をクリック
46+
5. `pwd` コマンドの結果を見ながら、「home」→「(自分の名前)」でアクセスする。
47+
48+
#### Finder (Mac)
49+
50+
Finder を起動すると、自分のコンピューターに保存されているファイルを一覧することができる。
51+
52+
1. ⌘ + `,` → 「すべてのファイル名拡張子を表示」をON
53+
2. Finder で⌘+Shift+G
54+
3. `pwd` で出てきたテキストをそのまま入力
55+
756
## 2.2.3 作業環境の構築(仮)
57+
58+
### コマンド紹介
59+
60+
- `pwd` : 現在の自分の場所 (**P**rint **W**orking **D**irectory)
61+
- `ls` : 今いるディレクトリにあるファイル (**L**ist **S**egments)
62+
- `cd <...>` : ディレクトリを移動する (**C**hange **D**irectory)
63+
- `cd ../` 一つ親のディレクトリに移動する (`/home/trap` なら `/home` に移動)
64+
- `mkdir <...>` : ディレクトリを作成する (**M**a**k**e **Dir**ectory)
65+
66+
### 作業環境の作成
67+
68+
1. `cd ~` と入力( `~` は 0 の2つ右のキー `^` と Shift 同時押し);最初の場所に戻る
69+
2. `mkdir pgbasic` と入力; `pgbasic` というディレクトリを作成する
70+
3. `cd pgbasic``pgbasic` に移動する
71+
4. `pwd`; 今いるディレクトリの場所を出力する
72+
73+
### 作業環境を開く方法
74+
75+
1. `cd pgbasic``pgbasic` に移動する
76+
2. `code main.cpp`; VSCode を開く。ここが講習中の作業場所。
77+
78+
もしくは、VSCode を直接起動しても前回のファイル・ディレクトリを開けるようになる。

docs/cpp/chapter-2/3.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,61 @@
22

33
## 2.3.1 Hello, traP!
44

5+
- VSCode を開く (`code main.cpp` コマンドで開く)
6+
7+
```cpp:line-numbers
8+
#include <iostream>
9+
using namespace std;
10+
11+
int main() {
12+
cout << "Hello, traP!" << endl;
13+
// Hello, traP! を出力する
14+
}
15+
```
16+
17+
- 保存して、VSCode 上で 「Run Code」で実行できる。
18+
- `Hello, traP!` となっている部分を書き換えると出力が変わる。実際に試してみよう。
19+
20+
::: tip I 章のまとめ
21+
22+
- プログラミングとは、「コンピューターにどのような動作をさせるかを指示する行為」
23+
- プログラムは、コンパイルして実行される
24+
- Windows, Mac, そして Linux という OS がある
25+
- ディレクトリという概念が存在する
26+
:::
27+
28+
ここまで読んだら、練習問題を解いてみましょう!
29+
530
## 2.3.2 [発展] nanoを使ったプログラミング(仮)
31+
32+
さきほどの操作はすべてターミナル上で完結させることもできる。ここでは少しだけそれを試してみよう。
33+
34+
::: info
35+
ここで紹介するのは「できる」というだけでの紹介で、本講習中では VSCode を使うことを強くおすすめします!
36+
:::
37+
38+
1. 「作業環境を開く方法」まで一緒
39+
2. `nano nano-test.cpp` でコードを開く
40+
3. キーを入力すると色々入力できる。
41+
4. ソースコードを入力する。
42+
5. `Ctrl + X`で終了
43+
6. `y`を入力したあと、`Enter`を押すと保存
44+
7. `ls`コマンドで`nano-test.cpp`があることを確認
45+
8. ターミナル上で、`clang++ nano-test.cpp` で「コンパイル」
46+
9. エラーが出なかったら、 `./a.out` で「実行」
47+
10. できた!
48+
49+
この方法で、次のソースコードからなる `nano-test.cpp` を作成してみよう。
50+
51+
```cpp:line-numbers
52+
#include <iostream>
53+
using namespace std;
54+
55+
int main() {
56+
cout << "Hello, nano!" << endl;
57+
}
58+
```
59+
60+
::: tip
61+
わからなかったり、詰まったりしたらすぐに TA を呼びましょう!
62+
:::

docs/cpp/chapter-2/fig-1.png

208 KB
Loading

docs/cpp/chapter-2/fig-2.png

328 KB
Loading

docs/cpp/chapter-2/index.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
11
# 2. はじめてのプログラミング
2+
3+
:::warning @講師, TA
4+
5+
**この段階で環境構築にまだまだ時間が掛かりそうな受講者が居る場合は、GitHub Codespaces に移行させてください。**
6+
講習後に環境構築の続きをするようにお願いします。
7+
:::
8+
9+
まずは「プログラミング」とはなにか、という半ばご高説を垂れるような話から始めよう。

0 commit comments

Comments
 (0)