SQLの概要とおもな使いかた
SQL(ゼロからはじめるデータベース操作)をよんでまとめました。
はじめに
データベースを管理するコンピュータシステムをDatabse Management System(DBMS)という
DBMSの種類
- Hierarchical Database(階層型データベース)
- Relational Database(RDB)
- Object Oriented Database(OODB: オブジェクト指向データベース)
- XML Database(XMLDB)
- Key-Value Store(KVS: キー・バリュー型データストア)
RDBMSのシステム構成
RDBMSとは、データベースからデータを取り出したり、データを書き換えたりするサーバの一種。
クライアントが、RDBMSに欲しいデータをSQL文にして送信する。要求を受け取ったRDBMSがデータベースにアクセスし要求されたデータを返す仕組み。
SQL
SQL(Structured Query Language)はデータベースを操作するための言語であり、ISO(国際標準化機構)で定められた標準規格、標準SQLがある。
標準SQLを覚えることで、さばざまなSDBMSでSQL文を書くことができる。
SQLは3つに分類される。
1.DDL(Data Definition Language)
データ定義言語。テーブルなどのオブジェクトを作成する
CREATE, DROP, ALTER
2.DML(Data Manipulation Language)
データ操作言語。データの挿入、更新、削除などを行う。
SELECT, INSERT, UPDATE, DELETE
3.DCL(Data Control Language)
データ制御言語。トランザクション(互いに関連する複数の処理をまとめた、一連の処理)関連のコマンド
COMMIT, ROLLBACK, GRANT, REVOKE
ルール
文の最後にセミコロンをつける。定数はシングルクォーテーションで囲む。
ユーザの作成と削除
$ createuser <username> $ dropuser <username> CREATE USER <username>; DROP USER <username>;
例
postgres=# CREATE USER ymotodesu2; CREATE ROLE postgres=# \du List of roles Role name | Attributes | Member of ------------+------------------------------------------------------------+----------- kabos | Create DB | {} pgadmin | Superuser, Create role, Create DB | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} posuser | | {} ymotodesu2 | | {} postgres=# DROP USER ymotodesu2; DROP ROLE postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- kabos | Create DB | {} pgadmin | Superuser, Create role, Create DB | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} posuser | | {}
データベース作成と削除
CREATE DATABASE <Database name>; DROP DATABASE <Database name>; $ createdb <database name> (createdb -O <username> <databasename>) $ dropdb <database name>
例
postgres=# create database ymotodb; CREATE DATABASE postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- dbtest | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | kabosdb | kabos | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | sample | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres testdb | posuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | ymotodb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (8 rows) postgres=# drop database ymotodb; DROP DATABASE postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- dbtest | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | kabosdb | kabos | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | sample | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres testdb | posuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (7 rows)
postgres@tk2-212-15593:~$ createdb test1 postgres@tk2-212-15593:~$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-----------+----------+-------------+-------------+----------------------- dbtest | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | kabosdb | kabos | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | sample | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres test1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | testdb | posuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | ymotodb | ymotodesu | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (9 rows) postgres@tk2-212-15593:~$ dropdb test1 postgres@tk2-212-15593:~$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-----------+----------+-------------+-------------+----------------------- dbtest | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | kabosdb | kabos | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | sample | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres testdb | posuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | ymotodb | ymotodesu | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (8 rows)
データベース一覧
$ psql -l # \l
テーブルの作成
CREATE TABLE <テーブル名> (<列名1> <データ型> <列の制約>, <列名2> <データ型> <列の制約>, <列名3> <データ型> <列の制約>, .. . <テーブルの制約1>, <テーブルの制約2>,... );
例
ymotodb=# create table Personal_information ymotodb-# (id CHAR(4) NOT NULL, ymotodb(# name TEXT NOT NULL, ymotodb(# age INTEGER, ymotodb(# PRIMARY KEY (id)); CREATE TABLE
データ型
- CHAR : 文字列。CHAR(200)のように最大長を指定する。文字列が指定した長さに満たない場合、残りに半角スペースが入る。
- VARCHAR : CHARと同じだが、指定した長さに満たなくても半角スペースで埋めない。
テーブルの削除
DROP TABLE <テーブル名>;
テーブルの検索
テーブル一覧
\dt
列を出力
SELECT <列名>..., FROM <テーブル名>;
すべての列を出力
SELECT * FROM <テーブル名>;
列に別名をつける
SELECT <列名1> AS <別名1>, <列名2> AS <別名2>, ... FROM <テーブル名>;
データの登録(INSERT)
INSERT INTO <テーブル名> (列1, 列2, 列3, ...) VALUES (値1, 値2, 値3, ...);
※文字列には挿入する値にシングルクォーテーションをつける
※INSERT文は一回の実行で1行を挿入する
例
ymotodb=# select * from personal_information ymotodb-# ; id | name | age ----+------+----- (0 rows) ymotodb=# insert into personal_information (id, name, age) values (0001, yamamoto, 45); ERROR: column "yamamoto" does not exist LINE 1: ...ersonal_information (id, name, age) values (0001, yamamoto, ... ^ ymotodb=# insert into personal_information (id, name, age) values ('0001', 'yamamoto', 45); INSERT 0 1 ymotodb=# select * from personal_information ; id | name | age ------+----------+----- 0001 | yamamoto | 45 (1 row)
列リストの省略
テーブル名のあとの列リストは、テーブルの全列に対してinsertを行うばあい省略することができる。省略時は、valueの値が左から順に各列に割り当てられる
例
ymotodb=# insert into personal_information values ('0002', 'satou', 57); INSERT 0 1 ymotodb=# select * from personal_information ; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 (2 rows)
他のテーブルのデータをコピー
INSERT INTO <テーブル名> (<列名>...) SELECT <列名> FROM <テーブル名>
例
ymotodb=# select * from personal_informationcp ; id | name | age ----+------+----- (0 rows) ymotodb=# insert into personal_informationcp (id, name, age) ymotodb-# select id, name, age from personal_information; INSERT 0 2 ymotodb=# select * from personal_informationcp ; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 (2 rows)
データの削除(DELETE文)
テーブルの中身を空にする
DELETE FROM <テーブル名>;
一部の行だけを削除する
DELETE FROM <テーブル名> WHERE <条件>;
例
ymotodb=# select * from personal_information; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 0003 | tanaka | 20 (3 rows) ymotodb=# DELETE FROM personal_information ymotodb-# WHERE age <= 20; DELETE 1 ymotodb=# select * from personal_information; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 (2 rows)
データの更新(UPDATE文)
UPDATE <テーブル名> SET <列名> = <式> WHERE <条件>
例
ymotodb=# select * from personal_information; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 0003 | yamada | 32 0004 | katou | 22 (4 rows) ymotodb=# UPDATE personal_information ymotodb-# SET name = 'コアラ' ymotodb-# WHERE id = '0004'; UPDATE 1 ymotodb=# select * from personal_information; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 0003 | yamada | 32 0004 | コアラ | 22 (4 rows)
トランザクション
トランザクションとは
- セットで実行する更新処理のまとまり 複数の操作をまとめて連続で行う。
- COMMIT(処理の確定)とROLLBACK(処理の取り消し)がある
書き方
BEGIN TRANSACTION # トランザクション開始文 DML文; DML文; . . トランザクション終了文(COMMIT または ROLLBACK);
COMMIT
トランザクション内の処理をすべて反映してトランザクションを終了するコマンド
ROLLBACK
トランザクション内の処理をすべて破棄し、トランザクションを終了するコマンド
COMMIT例
ymotodb=# select * from personal_information; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 0003 | yamada | 32 0004 | コアラ | 22 (4 rows) ymotodb=# BEGIN TRANSACTION; BEGIN ymotodb=# UPDATE personal_information ymotodb-# SET name = 'ゴリラ' ymotodb-# WHERE age = 45; UPDATE 1 ymotodb=# UPDATE personal_information ymotodb-# SET age = 78 ymotodb-# WHERE id = '0002'; UPDATE 1 ymotodb=# COMMIT; COMMIT ymotodb=# select * from personal_information; id | name | age ------+--------+----- 0003 | yamada | 32 0004 | コアラ | 22 0001 | ゴリラ | 45 0002 | satou | 78 (4 rows)
ROLLBACK例
ymotodb=# select * from personal_information ymotodb-# ; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 0003 | コアラ | 20 0004 | ラッコ | 11 (4 rows) ymotodb=# BEGIN TRANSACTION; BEGIN ymotodb=# UPDATE personal_information ymotodb-# SET age = age - 2 ymotodb-# WHERE name = 'ラッコ'; UPDATE 1 ymotodb=# UPDATE personal_information ymotodb-# SET name = 'suzuki' ymotodb-# WHERE id = '0003'; UPDATE 1 ymotodb=# ROLLBACK; ROLLBACK ymotodb=# select * from personal_information ; id | name | age ------+----------+----- 0001 | yamamoto | 45 0002 | satou | 57 0003 | コアラ | 20 0004 | ラッコ | 11 (4 rows)
Ruby入門
[Ruby入門]を読みながら写経しました。新しく覚えた箇所をメモ書きしておきます。
文字列
文字列オブジェクトに文字列を追加
文字列 << 追加する文字列 or 文字列.concat(追加する文字列)
例
str = 'Tokyo' str << ',Japan' str = 'Tokyo' str.concat('Kyoto')
シングルクウォートとバッククォートの違い
バッククォートは文字列中に改行文字\n
や、式展開#{ }を埋め込むことができる。シングルクウォートでは上記の文字が文字列として認識される。
エスケープ文字
手前に\をつけることでその文字を文字列として認識される。
%記法
%記法を使うとエスケープ文字を使用する必要がなくなる。
* %q! !
はシングルクウォート
* %Q! !
と%! !
はダブルクウォート
! ! だけでなく、他の記号も区切り文字としてしようできる。
ヒアドキュメント
複数行の長い文字列を作成する場合に使う。 <<識別子 1行目 2行目 3行目 ・・・ 識別子 識別子をシングルクウォートで囲むと式展開が無効になり、ダブルクウォートで囲むと有効になる
バックスラッシュ記法
キーボードから直接入力できない文字を記述するために使われる。
文字列の中でx
を使用したい場合、\x
を使用する。これを文字xをエスケープするという。"
をエスケープするには\"
と記述する。
数値と四則演算
ビット演算子
&: ビットAND :演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットがともに1の場合だけ1にする。
OR : ビットOR :演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットのどちらかが1の場合に1にする。
^ : ビットXOR :ビットの値が異なる場合にだけ1にする
~ : ビット反転 :演算子の右辺の値の各ビットに対して1の場合は0に、0の場合は1にする。
シフト演算子
ビット演算子の一つで、数値の各ビットを左または右にシフトさせるための演算子。
2進数において左へ1つビットをシフトさせることは値を2倍にすることで、右へ1つビットをシフトさせることは1/2にすることに相当する。
左シフト
a << b : 左辺の数値を右辺の値だけ左にシフト。左端からはみ出した部分は削除され、空いた右端には0が格納される。
0000000001011 = 11 ------------- 0000000010110 = 22
右シフト
a >> b : 左辺の数値を右辺の値だけ右へシフト。
0000000001011 = 11 ------------------ 0000000000101 = 5
定数と変数
定数は変数と同じく数値や文字列などのオブジェクトに名札をつけるために使用するが、定数の場合は例外を除き、一度オブジェクトを代入すると変更ができない。
定数に名前を付ける時のルール
1) 1文字目は英大文字 2) 2文字目以降は英数文字、アンダーバー(_) 3) 予約語は使用できない
組み込み定数
関係演算子と論理演算子の優先順位
(優先順位が高い) ! ~ ** * / % + - << >> & | ^ > >= < <= == != && || .. ... ?: = not and or (優先順位が低い)
条件演算子
条件式の結果によって異なる値を返す演算子
条件式 ? 真のときの値 : 偽のときの値
例
result = 80 flag = result > 60 ? "合格" : "不合格"
メソッド
トップレベル
クラス定義の中に記述されたのではなく、定義の外側にあるもの.メソッドはクラスの中に記述するものだが、トップレベルにも記述することができる。(Kernelモジュールの中に追加される)
Kernelモジュール
全てのクラスから参照できるメソッドを定義しているモジュール。
self
メソッド内で実行されるとそのメソッドを実行しているオブジェクトを示す
クラスとインスタンス
インスタンスメソッド
クラス内で定義されたメソッド。通常のメソッドはプログラム内からいつでも呼び出せるのに対し、インスタンスメソッドはそのクラスから作成されたオブジェクトしか呼び出すことができない。
アトリビュート、プロパティ
オブジェクトから取得したり、設定できる値
ローカル変数とインスタンス変数
- ローカル変数: メソッドやブロックの内部で作成される変数。メソッドやブロック内部でのみ有効
- インスタンス変数: 同じオブジェクトの内部で共有される変数。@ではじめる。
アクセス制御
クラス内での他のメソッドから実行されるだけのメソッドを定義するとき、オブジェクトから実行できないようにするためにアクセスを制限する。 public: オブジェクトからインスタンスメソッドとして実行可能 privete: クラス内の他のメソッドからのみ実行可能
※ 通常のメソッドは、指定をしない場合publicとなるが、initializeメソッドだけは常にprivateとなる。
モジュール
クラスとの違い
- インスタンスを作成することはできない
- 他のモジュールやクラスを継承できない
使用法
関数のようにモジュール内に定義されたメソッドを実行するか、クラスの中にincludeする。
Numericクラス
四捨五入:round
大きい方の整数へ変換する: ceil
小さい方の整数へ変換する: floor
整数を文字列に変換 基数を指定して形式変換: to_ s(base) 例: 12.to_s(2) →1100
文字コード取得: chr
商の整数部分を求める: div
整数または浮動小数点数の商を求める: quo, /
絶対値を取得: abs
Stringクラス
文字列を検索する(左から)。見つかった場合は文字列の左端の位置を返す | index(pattern[, pos]) 第一引数には検索する文字列または文字コード、第二引数には検索を開始する位置を指定する。省略した場合は先頭から検索する | str = "Hello" pos = str.index("ll") p pos 2 |
文字列を検索する(右から) | reindex(pattern[, pos]) | str = "Hello" pos = str.rindex("l") p pos 3 |
文字列が含まれているかどうか検索 | include?(substr) | str = 'Hello' check = str.include?("el") |
文字列を削除する | delete(str[, str2[, ...]]) 引数に指定した文字列が含まれていた場合は削除する。複数削除したい場合はカンマで区切って続けて引数に指定する。 | str = 'Yo!world' str.delete!('Y') |
Arrayクラス
開始と終了位置を指定して取得する |
1.新しい配列 = Arrayオブジェクト.slice(start..end)
2.新しいArrayオブジェクト = Arrayオブジェクト[start..end] |
ary = ['こん', 'にち', 'は', 'ruby']
newary = ary[1..3] →newaryに'にち','は','ruby'が入る。 | ||||||||||||||||||||||||||||||
開始と要素数を指定する |
1.新しい配列 = Arrayオブジェクト.slice(start, len)
2.新しいArrayオブジェクト = Arrayオブジェクト[start, len] |
ary = ['東京', '京都', '大阪', '名古屋', '福岡', '札幌']
newary = ary[1, 2] →newaryに、'京都', '大阪'が入る。 |
||||||||||||||||||||||||||||||
指定の位置に新しい要素を挿入する | Arrayオブジェクト[start, 0] = 新しい要素 |
ary = ["東京", "大阪", "名古屋", "福岡", "札幌"]
ary[1, 0] = ["横浜", "神戸"] ary = ["東京", "横浜", "神戸", "大阪", "名古屋", "福岡", "札幌"] |
||||||||||||||||||||||||||||||
配列を平坦化する | Arrayオブジェクト.flatten |
ary = [1, 2, [3, 4, 5], 6, 7]
newary = ary.flatten puts newary [1, 2, 3, 4, 5, 6, 7] |
||||||||||||||||||||||||||||||
配列の中の同じ要素を取り除く | Arrayオブジェクト.uniq |
ary = [1, 2, 5, 2, 3, 5]
newary = ary.uniq p newary [1, 2, 5, 3] |
配列の中の「nil」を取り除く | Arrayオブジェクト.compact |
ary = [1, 2, nil, 3, 4, nil]
newary = ary.compact p newary [1, 2, 3, 4] |
|||||||||||||||||||||||||||
指定した値と等しい要素をすべて取り除く | Arrayオブジェクト.delete(val)
引数「val」と等しい要素を取り除く |
ary = [1, 2, 3, 5, 4, 3]
ary.delete(3) p ary [1, 2, 5, 4] |
指定したインデックスの要素を取り除く |
Arrayオブジェクト.delete_at(pos)
引数「pos」であらわされるインデックスの位置にある要素を取り除く |
ary = [1, 2, 3, 5, 4, 3]
ary.delete_at(2) [1, 2, 5, 4, 3] |
|||||||||||||||||||||||||||
ブロック内での処理の結果がtrueの要素を取り除く | Arrayオブジェクト.delete_if {|x| ...} |
ary = [1, 2, 3, 5, 4, 3]
ary.delete_if {|x| x % 2 == 0} p ary [1, 3, 5, 4, 3] |
||||||||||||||||||||||||||||||
要素の順番を逆にする | Arrayオブジェクト.reverse |
ary = [1, 2, 3, 4, 5]
newary = ary.reverse |
ハッシュからキーと値を取り除く | Hashオブジェクト.delete(key) |
h = {'suzuki' => 43, 'tada' => 54, 'nanri' => 19}
h.delete('suzuki') |
||||||||||||||||||
ハッシュからキーと値を取り除く(指定したキーが存在しないばあいの処理を記述する) | Hashオブジェクト.delete(key) {|key|...} |
t = {'yamada' => 14, 'satou' => 24, 'saitama' =>83}
t.delete('suzuki'){|key| puts "#{key}はありません"} |
||||||||||||||||||
ブロック内で処理をし、結果がtrueの要素を取り除く | Hashオブジェクト.delete_if {|key, value| ...} | t = {'yamada' => 12, 'tanaka' => 65, 'suzuki' => 54} | ||||||||||||||||||
複製したハッシュオブジェクトからキーと値を取り除く | Hashオブジェクト.reject {|key, value| ...} | h = {"suzuki" => 87, "itou" => 76, "yamada" => 69} |
コマンド | 意味 |
---|---|
apt list | パッケージ一覧を表示 |
apt search | 検索して該当するパッケージを表示する |
apt show | パッケージの情報を表示する |
apt install | パッケージをインストールする |
apt remove | パッケージを削除する |
apt update | インストールできるパッケージ一覧の最新情報を取得 |
apt upgrade | インストール済みのパッケージをまとめて更新する |
apt full-upgrade | upgradeに調整を加える。(更新により使用できなくなるパッケージを削除等) |
簡単なまとめになりましたが学習を進めていくにつれ更新していこうと思います。
Macのvimtutor
fjordでのCSSの課題が終わりました。難しくて一週間くらいかかりましたが、完成後のお手本を見ても道筋が全く見えずに焦っていた頃に比べると、何とか形にするくらいにはなったので少し自信がつきました💪
今日はmacのvimチュートリアルを学習しました。概要はわかりましたが私の脳の容量を考えるとすぐに忘れる気しかしないので備忘録として書いておきます
vi概要
viには大きく分けて3つの動作モードがある
- インサートモード(文字を入力する)
i
を押す - コマンドモード(編集する)
- exモード viではこれらの動作モードをescキーと文字挿入系コマンドで切り替えながら作業する。ESCキーは自分がどこの動作モードにいるのか確認することもできるので、作業をするまえにESCキーを押す癖をつける。
vimtutorで覚えたこと箇条書き
- vimの終了
:q!
- 削除 カーソルを削除したい文字の上におき
x
- テキスト編集(挿入) カーソルの位置に追加する
i
をおすとインサートモードになる。そこから文字を入力 - テキスト編集(追加) 行末についかする
A
- ファイルを保存して終了
:wq
- 単語の末尾まで削除する
dw
カーソルの位置から行の末尾まで削除する
d$
多くのコマンドはオペレータとモーションからテキストに変更を加える。
削除コマンド
d
にモーションw
カーソルの一から空白を含む単語の末尾までe
カーソルの一から空白を含まない単語の末尾まで$
カーソルの位置から行末まで
などを追加する。例:d$
はカーソルの位置から行末まで削除となる。
モーションを繰り返すには数値を付与する オペレータ 数値 モーション
d2w
単語の末尾まで削除を二回繰り返す行の先頭に移動するには
0
を使用最後のコマンドを取り消す
u
- 行全体の取り消し
U
取り消しの取り消し
CTRL-R
最後に削除された行をカーソルの後に貼り付ける
p
使い方:dd
で行を全て消し、p
で貼り付けカーソルの下の文字を置き換える
r
- 変更コマンド
c
単語の一部、全体を変更cw
タイプ中のミスはバックスペースキーで直すことが出来る
ファイル内での位置とファイルの状態がページの一番下に表示される
ctrl-g
- ファイルの最下行に移動
G
- ファイルの先頭に移動
gg
指定した行番号に移動
行番号 + G
ファイル内検索
/
の後、検索語句をタイプする。 つぎの文字を検索する にはn
を押す対応する括弧を検索 括弧(,[,{にカーソルを移動し、%とタイプする
行の最初のoldをnewに置き換える
- 行のすべてのoldをnewに置き換え
:s/old/new/g
- 置き換える範囲行番号を指定する
:#,#s/old/new/g
(##に開始と終 了の行番号指定) - ファイル全体で見つかるものを置き換える
:%s/old/new/g
ファイル全体で見つかるものを確認しながら置き換える
:%s/old/new/gc
外部コマンドを実行する
:!
のあとにコマンド- ファイルへの変更を保存する
:w ファイル名
- 選択したものを書き込む
v
を押してからカーソルを移動し選択したい範囲まで移動し:P
を押す。その後w ファイル名
をタイプ - ファイルの中身を挿入する
:r ファイル名
←外部コマンドの出力を読み込むこともできる:r !ls
(lsコマンドの出力を読み込む - カーソルの後ろにテキストを追加
a
- コピーとペースト コピー
y
ペーストp
(v
で選択し、y
でコピー) - カーソルを当てた文字のつぎからテキストを追加する
a
- 行末にテキストを挿入する
A
置き換えモード
R
オンラインヘルプ
<HELP>
キー<F1>
キー:help
(コマンドを引数として渡すとその題名のヘルプを見ることが出来る e.g.:help user-manual
:help w
ヘルプウィンドウを閉じる:q
vimrcスクリプトと:set xxx
が理解できなかったので復習します。
Webサービスの基本
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術を読んだのでまとめます。
大事
実務では、非エンジニアとエンジニアに言葉の壁があるのでエンジニアはわかりやすく伝えることを意識する。 日頃から自己完結ではなく伝えることを意識して勉強する。
Webサービスの動き方
Webサービスはクライエント側がこのページを見たいという要求を送り、サーバー側が要求されたページを返すことの連続で成り立っている。このやり取りには「住所」に当たるものが必要でそれはIPアドレスと呼ばれる。IPアドレスは数字であらわされるため、人間にわかりやすく表現したものがあり、それはドメインと呼ばれる。(例)ドメイン:
facebook.com = IPアドレス:31.13.82.1
クライエント側がサーバに要求を送る際、DNSサーバ(ドメインネームシステム)がドメインからIPアドレスへの変換作業(名前解決)をしている。 サーバー用のOSはUnixベースのOSがよく使われていて、MacもUnixベースのOSであるため開発環境がサーバの環境に近い。 Webサイトは静的なページをHTMLで書き、CSSでデザインする。ここに、サーバサイドスクリプト(RubyやJava)を記述し、動的な要素を加える。