Ubuntu18.04にて、USキーボードを用いて英数字と日本語(ひらがな)の切り替えを行なう方法

自宅のデスクトップパソコンでもUbuntu18.04を使用しているのですが、こちらではUSキーボードを使用しています。

よって今回はUSキーボードにて、半角英数字と日本語入力の切り替えをする為の設定を説明します。

 

なお、起動時は日本語入力に切り替えた際にどうしても「直接入力」が基準になってしまう問題があります。これにより、初回の日本語入力の際にはわざわざマウスにて直接入力モードを変えなければいけません。

 

よって、この記事では Ubuntu起動時から『半角英数字(A)』と『ひらがな(あ)』で切り替えが可能な設定を目指す事と致します。

その代わり、Windows でUSキーボードを使っていた人にとっては、入力切り替えのショートカットキーはAlt + `キーだったはずですが、今回の方法ではそのショートカットが使えない事をご了承下さい。当記事での入力切り替えのショートカットはCtrl + Spaceキーで行ないます。

 

1: 入力ソースの設定

2: 入力ソース切り替えショートカットキーの変更

3: キーの割当の変更

 

 


【入力ソースの設定】

通常、英数字と日本語の切り替えを行なう為にソースを2種類設定しておくのが一般的だと思います。

f:id:Magidropack:20190105152819p:plain

※画像は「設定」のウィンドウの一部です。

 

ですが、Mozc はこのソース1つで英数字と日本語入力を賄っているのが前提らしい理由により、開始時の入力モードが『直接入力(A)』になっていると考えられます。初めて英数字から日本語入力に切り替えると必ず『直接入力』が第一に選択されるのも、恐らくそれが原因です。

 

よって、USキーボードの使用に関係無く、入力ソースを Mozc 1つにします。上記画像の「設定」ウィンドウを開き、「地域と言語」項目より入力ソースを『日本語(Mozc)』のみにしましょう。

消したいソースを選択し、その下の「-」ボタンを押せば削除出来ます。

 

f:id:Magidropack:20190105154256p:plain

※入力ソースを1つにするとディスプレイ右上の入力モードの表示が消えてしまうので、一度ログオフして下さい。

 

 


【入力ソース切り替えショートカットキーの変更】

次に、同じく「設定」ウィンドウの左側より「デバイス」→「キーボード」項目と進んで下さい。

 

f:id:Magidropack:20190105160806p:plain

入力ソースが1つである以上、「入力ソースの切り替え」の概念が無くなりますので、キーボードの入力ソース切り替えのショートカットキーは不要となります。

 

ただし、ショートカットキーが割り当てられていると切り替え動作自体は行なわれますので、ここでCtrl + Spaceキーが割り当てられていると逆に Mozc のキー設定が出来ません。よって、もしCtrl + Spaceキーが割り当てられていた場合は別のショートカットキーに差し替えるか、無効にして下さい。
やり方は簡単で、「次の入力ソースへ切り替える」のエリアでダブルクリックし、ウィンドウ内の指示に従って他のショートカットキーを入力するか、 Backspaceキーにてリセット(無効)にするかです。

f:id:Magidropack:20190105162457p:plain

 

これで、 Mozc のキー設定にてCtrl + Spaceキーの割当てが可能となります。

 

 


【キーの割当の変更】

最後に Mozc のキー設定を行ないますが、要領としては下記の過去記事とほとんどやり方は変わらないので、こちらも参考にしてみて下さい。

magidropack.hatenablog.com

画面右上の入力モードをクリックし、『 ツール 』内の『 プロパティ 』を開きます。

f:id:Magidropack:20190105165540p:plain

f:id:Magidropack:20181129171337p:plain

 

Mozcのプロパティウィンドウが表示されますので、『 キー設定の選択 』項目の『 編集 』ボタンを押し、Mozcキー設定画面を出します。

f:id:Magidropack:20181130111513p:plain

 

ここで、『 Hankaku/Zenkaku 』入力キーが各モードの4箇所で割り当てられていますが、これらを全て希望するショートカットキーに変更すれば良いですね。

・変換前入力中

・変換中

・直接入力

・入力文字なし

これらのモード内にある『 Hankaku/Zenkaku 』の所を、希望のショートカット(当記事では『 Ctrl Space 』に変更して下さい。

やり方としては、各モードの「入力キー」項目の所で3回クリックし、下記ウィンドウが出たらCtrl + Spaceキーを押すだけです。

f:id:Magidropack:20190105171615p:plain

入力ソース切り替えショートカットキーの変更でも書いてありますが、「次の入力ソースへ切り替える」のショートカットキーにCtrl + Spaceキーが割り当てられているとそちらの動作が優先される為、ここでの Mozc キーバインディング設定が出来なくなります。

 

計4箇所を変更すれば終わりです。「OK」を押してブラウザ等で入力モードとし、Ctrl + Spaceキーを複数回押す事で『半角英数字(A)』と『ひらがな(あ)』が交互に切り替われば完了です。

 

 

...本来はここでAlt + `キーを設定すれば Windows と同じ感覚で入力切替出来るのでは?と思いますが、Mozc キーバインディング設定ではAltキーの使用が認められていない様です。

なので、この方法ではAlt + `キーを割り当てる事が不可能なのです。

 

慣れてしまえばCtrl + Spaceキーでも別に問題はありませんが、やはりAltキーも受け付けて欲しかったのが正直な気持ちです。他に解決策があればまた記事にしたいと思います。

 

 

以上です。

【Rust】for文にて、降順で処理する方法

Rustのfor文ですが、C++等の今までの言語とは書き方が異なる為、降順となるとどう書けば良いのか分からなくなる事もあるかもしれません。

 

今回は、Rustでのfor文(昇順・降順)の書き方の一例を、C++と合わせて説明します。

 

1: <昇順> C++での書き方

2: <昇順> Rustでの書き方

1: <降順> C++での書き方

2: <降順> Rustでの書き方

 

 


【<昇順> C++での書き方】

C++でのfor文の書き方です。お馴染みですが、昇順で書いてみましょう。

 

#include <iostream>

using namespace std;

int main(void){

    string str = ", ";
    
    for (int i = 0; i < 10; i++) {
	cout << i + 1;
	if (i == 9) {
	    cout << "\n";
	} else {
	    cout << str;
	}
    }

    return 0;
}

出力結果は下記となります。

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

特に説明は不要ですね。

 

 


【<昇順> Rustでの書き方】

Rustで書いてみます。出力結果こそ同じですが、C++とは処理方法を若干変えました。

 

fn main(){
    let min_val: i32 = 0;
    let max_val: usize = 10;
    let str: &str = ", ";

    for i in min_val..5 {
        print!("{}{}", i + 1, str);
    }

    for i in 5..max_val {
        if i == 9 {
            println!("{}", i + 1);
        } else {
            print!("{}{}", i + 1, str);
        }
    }
}

for文を2回に分けた理由ですが、スタート値とエンド値に変数を加える際の書き方と、型の変化を説明したいのが狙いです。

 

let min_val: i32 = 0;
let max_val: usize = 10;

min_val と max_val でそれぞれ型を変えていますが、実はfor文の i 変数は、スタート値及びエンド値に変数が使われていると、その変数の型に自動的に変化します。また、両者の変数の型が違う場合は、スタート値の変数の型が優先されます

 

for i in min_val..5 {
    ...
}

min_val 変数がスタート値で、「5」がエンド値です。ここでは、i 変数が 0 から 4 の範囲で値が増えていきます。また、ここでの i 変数の型は『 i32 』です。

 

for i in 5..max_val {
    ...
}

今度は「5」がスタート値で、max_val 変数がエンド値です。ここでは、i 変数が5 から 9 の範囲で値が増えていきます。要は最初のfor文の続きですね。そして、ここでの i 変数の型は『 usize 』となります。

 

 


【<降順> C++での書き方】

C++での降順の書き方の一例です。

 

#include <iostream>

using namespace std;

int main(void){

    int value = 10;
    string str = ", ";
    
    for (int i = value; i > 0; i--) {
	cout << i;
	if (i == 1) {
	    cout << "\n";
	} else {
	    cout << str;
	}
    }

    return 0;
}

出力結果は下記となります。

10, 9, 8, 7, 6, 5, 4, 3, 2, 1

アナログみたいに i 変数の初期値や減算等、各項目の設定を明確に変える必要がありますが、そのおかげで処理の様子は実に分かりやすいと思います。

 

 


【<降順> Rustでの書き方】

Rustで書いてみます。出力結果は同じですが、結構ややこしいです。

 

fn main(){
    let min_val: i8 = 0;
    let max_val: i32 = 10;
    let str: &str = ", ";

    for i in (5..max_val).rev() {
        print!("{}{}", i + 1, str);
    }

    for i in (min_val..5).rev() {
        if i == 0 {
            println!("{}", i + 1);
        } else {
            print!("{}{}", i + 1, str);
        }
    }
}

rev() 関数を用いる事で降順となるのですが、あくまで i 変数の処理範囲の書き方は同じである事を注意して下さい。

 

for i in (5..max_val).rev() {
    ...
}

ここの解釈ですが、処理範囲の書き方は同じなので、i 変数は、

9, 8, 7, 6, 5

の順で変異します。よって、出力の際には i に 1 を加算しておかないと結果が異なります。

 

for i in (min_val..5).rev() {
    ...
}

ここもですが、処理範囲の書き方は同じなので、i 変数は、

4, 3, 2, 1, 0

の順で変異します。よって、出力の際には i に 1 を加算しておかないと同じく結果が異なります。

出力結果はC++と同様、下記となります。

10, 9, 8, 7, 6, 5, 4, 3, 2, 1

 

基本的なRustでのfor文の例を載せましたが、慣れないと理解には多少手こずるかもしれませんね。

 

以上です。

【Rust】コンソールにて、スペースを挟んで2つの入力内容を各変数に格納し取り扱う方法

Rustのコンソールプロジェクトにおいて、スペースを挟んで文字列や数値等を複数入力し、それぞれ入力した内容を別個に取り扱いたい時もあります。

例として、名前と年を入力して出力する際に下記動作を求めたい場合です。

名前と年齢を、スペースを挟んでそれぞれ入力してく下さい:
magidro 28
magidroさんは28歳です。

 

今回はスペースを挟んで2つ以上の入力内容を取り扱うやり方を、C++での書き方と共に説明します。

 

1: C++での書き方

2: Rustでの書き方

3: 3項目以上の値の取り出し方法

 

 


【C++での書き方】

C++では文字列も数値も、 cin を用いる事で解決出来ます。

 

#include <iostream>

using namespace std;

int main(void){

    string name;
    int age;

    cout << "名前と年齢を、スペースを挟んでそれぞれ入力してく下さい:\n";
    cin >> name >> age;

    cout << name << "さんは" << age << "歳です。" << endl;

    return 0;
}

フィルターこそ掛けていないものの、C++ では cin にて変数を並べるだけで機能します。非常に簡単ですね。出力結果は下記となります。

名前と年齢を、スペースを挟んでそれぞれ入力してく下さい:
magidro 26
magidroさんは26歳です。

 

もちろん、cin の後に3つ以上の変数を並べても、同様にスペースを空けて入力するだけで格納出来ます。

 

#include <iostream>

using namespace std;

int main(void){

    string name;
    int age;
    int height;

    cout << "名前と年齢、身長をスペースを挟んでそれぞれ入力してく下さい:\n";
    cin >> name >> age >> height;

    cout << name
         << "さんは"
         << age
         << "歳、身長は"
         << height
         << "cmです。"
         << endl;

    return 0;
}

出力結果は下記です。

名前と年齢、身長をスペースを挟んでそれぞれ入力してく下さい:
magidro 27 172
magidroさんは27歳、身長は172cmです。

 

 


【Rustでの書き方】

ではRustで同じ処理を行なえる様に書いてみます。

 

use std::io;

fn main() {
    println!("名前と年齢を、スペースを挟んでそれぞれ入力してく下さい:");

    let mut word = String::new();
    io::stdin().read_line(&mut word).ok();

    let vec: Vec<&str> = word.split_whitespace().collect();

    let name = vec[0].trim().to_string();
    let age = vec[1].trim().parse().unwrap_or(0);

    println!("{}さんは{}歳です。", name, age);
}

ポイントを説明します。

 

io::stdin().read_line(&mut word).ok();

これが入力を受け付ける部分です。ここでまずは word 変数にスペースを含めた文字列を格納します。参考として、「 magidro 28 」と入力します。

 

let vec: Vec<&str> = word.split_whitespace().collect();

一度、各入力文字列を Vector 型の vec 変数を用意し、split_whitespace() 関数を使ってスペースで区切られた文字列を vec 変数に格納します。C# での split と似た様な方法ですね。

 

let name = vec[0].trim().to_string();
let age = vec[1].trim().parse().unwrap_or(0);

vec 変数に格納した各文字列を、それぞれの型に変換して代入します。この場合、

・vec[0] には入力した文字列(例: magidro)

・vec[1] には入力した値(例: 28)

がそれぞれ格納されているので、それぞれ name と age に代入しております。

 

 


【3項目以上の値の取り出し方法】

この処理は、スペースで区切られた分の文字列を自動的に vec 変数に格納してくれます。 3つ文字列を入力すれば3つに、5つの文字列を入力すれば5つにそれぞれ格納する訳ですね。

let name01 = vec[0].trim().to_string();
let name02 = vec[1].trim().to_string();
let name03 = vec[2].trim().to_string();
...

 

しかし、10項目以上の文字列を格納するとなると、コードが長くなりがちです。

もし変数名が全て同じでも構わないのであれば、for 文を使う手もあります。

 

use std::io;

fn main() {
    println!("1 〜 100 までの得点を、スペースを挟んで1つ以上入力してく下さい:");

    let mut word = String::new();
    io::stdin().read_line(&mut word).ok();

    let vec: Vec<&str> = word.split_whitespace().collect();
    let mut score = Vec::new();

    for i in 0..vec.len() {
        score.push(vec[i].trim().parse().unwrap_or(0));
        if i == vec.len() - 1 {
            println!("{}点", score[i]);
        } else {
            print!("{}点 ", score[i]);
        }
    }
}

任意の数の得点をスペースで区切って入力し、結果を出力するコードです。

 

let mut score = Vec::new();

得点の個数は任意ですので、score という名の Vector を作り、入力された分の得点を格納出来る様にします。動的にバッファを確保するという事ですね。

 

for i in 0..vec.len() {
    ...
}

for 文ですが、0..vec.len() と範囲を指定する事で、vec に格納された値の個数だけ繰り返す事で、任意の得点個数に対応出来る様にします。

 

score.push(vec[i].trim().parse().unwrap_or(0));

実際に、score に各得点を文字列から数値に変換して代入する処理です。

・score[0] には vec[0] (1番目の得点)を代入

・score[1] には vec[1] (2番目の得点)を代入

...

という感じです。

 

if i == vec.len() - 1 {
    println!("{}点", score[i]);
} else {
    print!("{}点 ", score[i]);
}

これは結果を出力する際に、最後の得点を表示した後はスペースを入れず、改行するという処理内容を書いています。

vec.len() - 1

と「 1 」をマイナスしていますが、これは for 文の繰り返す定義が、

 

・0..数値の1つ前まで(例: 0..10 なら、0 〜 9まで繰り返すという意味)

 

である理由の為です。詳しくは公式のチュートリアルのループの項目を確認してみて下さい。

出力結果は以下となります。

【例1】

1 〜 100 までの得点を、スペースを挟んで1つ以上入力してく下さい:
1 2 3 4
1点 2点 3点 4点

【例2】

1 〜 100 までの得点を、スペースを挟んで1つ以上入力してく下さい:
85 68 27 99 100 34 7
85点 68点 27点 99点 100点 34点 7点

 

プログラミングのスキルチェックではこの様な処理にて解く問題もありますので、ぜひ使ってみて下さい。

 

以上です。

【Rust】コンソールにて数値を入力し、matchを用いて結果をprintにて出力させる方法

前回ではコンソールにて文字列を入力し出力するやり方を書きました。

 

今回はRustプロジェクトにおいて、コンソールにて何かしら入力した数値を元に、それぞれ異なる出力結果を表示する方法を説明します。

なお例のごとく、C++と合わせていきたいと思います。

 

1: C++での書き方

2: Rustでの書き方

3: 入力処理の関数化

 

 


C++での書き方】

C++では文字列も数値も、 cin を用いる事で解決出来ます。

 

#include <iostream>

using namespace std;

int main() {
    int answer;
    cout << "0 〜 9 から1つ数値を選んで入力して下さい:\n";
    cin >> answer;

    switch (answer) {
	case 1:
	    cout << "ゲーム01を開始します。" << endl;
	    break;
	case 2:
	    cout << "ゲーム02を開始します。" << endl;
	    break;
	case 3:
	    cout << "ゲーム03を開始します。" << endl;
	    break;
	default:
	    cout << "終了します。" << endl;
	    break;
    }

    return 0;
}

 

フィルターを掛けてないので数字以外の文字も受け付けてしまいますが、ご了承下さい。出力結果は下記となります。

0 〜 9 から1つ数値を選んで入力して下さい:
1
ゲーム01を開始します。

1 〜 3 以外の数字や文字列では下記結果になります。

0 〜 9 から1つ数値を選んで入力して下さい:
7
終了します。

 

 


【Rustでの書き方】

ではRustで同じ処理を行なえる様に書いてみます。

 

use std::io;

fn main() {
    println!("0 〜 9 から1つ数値を選んで入力して下さい:");
    let mut number = String::new();
    io::stdin().read_line(&mut number).ok();
    let answer = number.trim().parse().ok().unwrap();

    match answer {
        1 => println!("ゲーム01を開始します。"),
        2 => println!("ゲーム02を開始します。"),
        3 => println!("ゲーム03を開始します。"),
        _ => println!("終了します。"),
    }
}

match を使用しました。ポイントとなる部分を説明していきます。

 

let mut number = String::new();

コンソールからの入力はあくまで文字なので、いずれ数値に置き換えるとしても、まずはString型でミュータブル変数を作成する必要があります。

 

let answer = number.trim().parse().ok().unwrap();

今回は文字列ではなく数値に変換してanswer変数に格納したいので、parse() 関数を用います。よって、もし数値以外の文字等を入力した場合はエラーとなり、処理が終了します。例外処理をシステム側で行なってくれる訳ですね。

 

出力結果はC++の時と同じになると思います。

 

 


【入力処理の関数化】

この処理も関数化して使いやすくしてみましょう。

 

use std::io;

fn main() {
    println!("0 〜 9 から1つ数値を選んで入力して下さい:");
    let answer01 = get_input();

    println!("再度、数値を入力して下さい:");
    let answer02 = get_input();

    match answer01 {
        1 => println!("ゲーム01を選択。プレイ時間は{}分です。", answer02),
        2 => {
            let num01 = 4;
            println!("ゲーム02を選択。 {} + {} = {}", num01
                                                , answer02
                                                , num01 + answer02);
        },
        3 => {
            print!("ゲーム03を選択。 ");
            println!("answer02 = {} です。", answer02);
        },
        _ => println!("終了します。"),
    }
}

fn get_input() -> i32 {
    let mut number = String::new();
    io::stdin().read_line(&mut number).ok();
    return number.trim().parse().ok().unwrap();
}

get_input() 関数にて、戻り値の型を i32 や usize 等にします。

 

3 => {
    print!("ゲーム03を選択。 ");
    println!("answer02 = {} です。", answer02);
},

また、match の各パターン内において複数の処理を行ないたい場合は、『 { } 』で全体を括る事で解決出来ます。

出力結果の一例は下記となります。

0 〜 9 から1つ数値を選んで入力して下さい:
2
再度、数値を入力して下さい:
36
ゲーム02を選択。 4 + 36 = 40

 

同じく、プログラミングのスキルチェック等での課題でお役に立てればと。

 

以上です。

【Rust】コンソールにて文字列を入力し、結果をprintにて出力させる方法

Rustプロジェクトにおいて、コンソールにて何かしら入力した文字列をそのまま出力する方法を説明します。

 

※元々はC++を勉強していて、そこからRustに以降しました。よって、C++のコードも合わせて記載し、その違いを把握しながらRustでのコードの書き方を少しずつアウトプットして行きたいと思います。

 

1: C++での書き方

2: Rustでの書き方

3: 入力処理の関数化

 

 


C++での書き方】

C++では入力の読み込みに cin を用いています。

#include <iostream>

using namespace std;

int main() {
    string answer;
    cout << "何か文字を入力して下さい:\n";
    cin >> answer;

    cout << answer << endl;

    return 0;
}

 

こんな感じでしょうか。実行すると、「 何か文字を入力して下さい: 」で改行され、そこから入力を受け付けます。適当な文字列を入力しエンターキーを押すと、入力した文字列がそのまま次の行で出力されるでしょう。

何か文字を入力して下さい:
hogehoge
hogehoge

 

 


【Rustでの書き方】

ではRustで同じ処理を行なえる様に書いてみます。

fn main() {
    println!("何か文字を入力して下さい:");

    let mut word = String::new();
    std::io::stdin().read_line(&mut word).ok();
    let answer = word.trim().to_string();

    println!("{}", answer);
}

 

1つ1つ説明します。

 

let mut word = String::new();

入力した文字列を受け取るString変数を用意します。空文字として定義しても mut (ミュータブル)なので文字列の変更や追加が可能です。よって、

let mut word = "".to_string();

でもOKです。

 

std::io::stdin().read_line(&mut word).ok();

ここが入力を受け付けるコードです。先頭の std:: は予め use で定義しておく事で省略も可能となります(後ほど例を書きます)。これにより、入力した文字列は word 変数に格納されます。

 

let answer = word.trim().to_string();

出力用のString変数です。これはただ最後に出力するだけに使われるので、 mut は不要です。入力した文字列が格納されている word 変数を、String型に置き換えて answer 変数に代入します。

実行すると、C++の例と同じ様な結果になります。 

何か文字を入力して下さい:
hogehoge
hogehoge

 

 


【入力処理の関数化】

一応完成はしていますが、関数化して使い回し出来る様にしましょう。

 

use std::io;

fn main() {
    println!("何か文字を入力して下さい:");

    let answer = get_input();

    println!("{}", answer);
}

fn get_input() -> String {
    let mut word = String::new();
    io::stdin().read_line(&mut word).ok();
    return word.trim().to_string();
}

get_input 関数を新たに作成しました。

 

return word.trim().to_string();

関数内で word 変数を定義し、入力した値を return で返す方法がこちらになります。数値等はまた書き方が異なりますが、文字列についてはこの書き方で良いでしょう。

 

use std::io;

また、コードの先頭にて事前にこれを定義しておく事で、コード内で必要とされる std:: が省略可能となります。

実行すると同じ結果が得られるでしょう。

 

関数化する事で、複数の入力を受け付けたい時もコードが煩雑にならずに済みます。

 

use std::io;

fn main() {
    println!("何か文字を入力して下さい:");
    let answer01 = get_input();

    println!("繋げたい文字を入力して下さい:");
    let answer02 = get_input();

    println!("{}{}", answer01, answer02);
}

fn get_input() -> String {
    let mut word = String::new();
    io::stdin().read_line(&mut word).ok();
    return word.trim().to_string();
}

こんな感じで、2つの入力文字列を1つに繋げて出力したい場合等に便利です。出力結果は下記となります。

何か文字を入力して下さい:
magidro
繋げたい文字列を入力して下さい:
pack
magidropack

 

プログラミングのスキルチェック等での課題でお役に立てれば幸いです。

 

以上です。

Ubuntu18.04にてJet Brains社提供のRustコーディング環境を導入する方法

Ubuntu18.04にてRustをインストールする方法を説明します。

 

とは言っても、Rustを使える様にする手順は非常に簡単で、コマンド1つ(正式には2つ)で完了です。よって、Rustのインストールと共に、コーディング環境(エディター)も揃えたいと思います。

 

今ではRustに対応しているエディターも多く有り、有名な『 Atom 』や『 Visual Studio Code 』でもRustに対応しています。

しかし、やはりJet Brains社のエディターは非常に優秀です。そして現在では、Rust用のエディター開発が行なわれており、2018/12/13時点で無料で導入出来るという嬉しいニュースを知りました。今回は早速、Jet Brains社のRustエディターを導入してみましょう。

 

1: Rustのインストール

2: IntelliJ IDEA Community Editionのインストール

3: IntelliJ Rustの導入

 

 


【Rustのインストール】

ではまず、Rustのシステムをインストールします。Ubuntu18.04では、コマンド1つでインストールが可能です。

$ curl https://sh.rustup.rs -sSf | sh

 

これだけです。

 

f:id:Magidropack:20181213111419p:plain

※上記エラーが出た場合は、『 curl 』自体がインストールされていないとの事なので、指示通り、

$ sudo apt install curl

と打って curl を事前にインストールしておいて下さい。

 

話を元に戻します。

f:id:Magidropack:20181213112014p:plain

 

上記の様に途中でインストール方法を聞かれますので、1 と打ってエンターキーを押して下さい。インストールが始まります。

f:id:Magidropack:20181213114145p:plain

 

「 Rust is installed now. Great! 」と出れば完了です。

 

次に、Rust の各コマンドを仕える様にする為、

$ source ~/.cargo/env

にて設定して下さい。この後に、インストールされているかバージョンを確認してみましょう。

$ rustc --version

これにて 「 rustc 1.31.0 ... 」が表示されればOKです。

 

では試しにプロジェクトを作って起動してみましょう。ホームフォルダ内にて、

$ cargo new --bin rust_sample

と入力して下さい。コマンドの意味ですが、

 

cargo :   Rustでのコマンドの1つ

new :   新たにプロジェクトを作る

--bin :   プロジェクトの種類

rust_sample :   プロジェクト名

 

です。実行すると、ホームフォルダに『 rust_sample 』フォルダが新たに作成されますので、今度はその rust_sample フォルダ内に移動して、下記コマンドを実行します。 

$ cd rust_sample
$ cargo run

cargo run でプロジェクトの実行となります。 

f:id:Magidropack:20181213123614p:plain


「 Hello, world! 」と表示されればプロジェクトがちゃんと生成されています。これでインストールは終了です。

 

※下記の様なエラーが出た場合は、ビルドに必要な機能が不十分である可能性があります。

could not exec the linker `cc`: No such file or ...

この場合は、下記のコマンドにて『 build-essential 』をインストールすると解決すると思います。 

$ sudo apt install build-essential

 

 


IntelliJ IDEA Community Editionのインストール】

この記事のメインであるエディターの導入ですが、現時点ではRust専用のIDEは無く、他のIDEの機能の一部として存在しています。

なので、この記事では『 IntelliJ IDEA Community 』の無料エディターを利用しましょう。下記記事を参考に、『 IntelliJ IDEA Community 』をインストールして下さい。

magidropack.hatenablog.com

 

 


IntelliJ Rustの導入】

では、コチラIntelliJ Rustのクイックスタートサイトを参考に、IntelliJ IDEAを起動しましょう。

f:id:Magidropack:20181213143459p:plain

 

スタート画面が出たら、右下の『 Configure 』より『 Setting 』を選択して下さい。各種設定画面に移動します。

f:id:Magidropack:20181213145801p:plain

 

左側にて『 Plugin 』項目を選択し、赤枠の『 Install JetBrains plugin... 』ボタンをクリックして下さい。

f:id:Magidropack:20181213150312p:plain

 

一番左上にて『 rust 』と検索ワードを入力すると、『 Rust LANGUAGES 』の候補が出てきますので、それを選択した上で右側の緑の『 Install 』ボタンをクリックします。

完了したら画面を閉じて下さい。途中でアプリの再起動を求められるので、素直に『 Restart 』ボタンを押しましょう。

f:id:Magidropack:20181213150914p:plain

 

改めてスタート画面が出たら、今度は『 Create New Project 』をクリックして下さい。

f:id:Magidropack:20181213152410p:plain

f:id:Magidropack:20181213152712p:plain

すると、左側に『 Rust 』の項目がありますのでこれを選択し、赤枠の『 Download via rustup 』をクリックして標準のライブラリを決定します。

『 Standard library 』の右の枠にパスが設定されたら画面中央下の『 Next 』ボタンを押して下さい。

次の画面でプロジェクト名と作成したい場所を指定します。

f:id:Magidropack:20181213154334p:plain

 

指定したら画面中央下の『 Finish 』ボタンにて完了して下さい。

f:id:Magidropack:20181213154615p:plain

 

無事にプロジェクトが生成され、エディター画面に変わったらOKです。発展途上ではありますが、補完機能も充実しているのでJet Brains社のエディターを好んで使っている方にとっては快適に作業出来るかと思います。

 

以上です。

Ubuntu18.04にて、半角 / 全角の切り替えをMac風に行なう方法

Ubuntu18.04のキー配置や割当てはほぼWindowsと同じです。なので、Windowsのキー配列に慣れている方はこのままでも良いかと思います。

 

ですが、Macから移行してきた方にとっては『 Command 』キーや、Macでの『 Ctrl 』キーが無い事で不便に思う方もいらっしゃるかもしれません。また、半角 / 全角の切り替えについても、Mac風の方が使いやすい(いちいち現在の入力状態を目視で確認する必要が無い)と思う人もいるでしょう。

 

よってこの記事では、Windowsパソコンの日本語キーボードに搭載されているものの、ほぼ使う事が無い『 無変換 』及び『 変換 』キーを、Macと同様に半角 / 全角の切り替えに割り当てるやり方を説明します。

※『 無変換 』及び『 変換 』キーは、中央最下段の『 スペース 』キーの両サイドにあると思います。

f:id:Magidropack:20181129160727p:plain

 

1: 各モードでの、半角 / 全角キーのコマンドの確認

2: 変換キーのコマンドの修正

3: 無変換キーのコマンドの修正

4: 終わりに

 

 


【各モードでの、半角 / 全角キーのコマンドの確認】

割り当てを変更する前に、まずは半角 / 全角キーの仕組みがどうなっているのか確認してみましょう。画面右上の入力モードをクリックし、『 ツール 』内の『 プロパティ 』を開きます。

f:id:Magidropack:20181129161910p:plain

f:id:Magidropack:20181129171337p:plain

 

Mozcのプロパティウィンドウが表示されますので、『 キー設定の選択 』項目の『 編集 』ボタンを押し、Mozcキー設定画面を出します。

f:id:Magidropack:20181130111513p:plain 

 

この画面では、各モードでの各ボタンのコマンドの確認と設定変更が出来ます。

ここで、『 Hankaku/Zenkaku 』入力キーが各モードでどの様なコマンドになっているかを確認しましょう。上記画像での【 変換前入力中 】モードでは、『 IME を無効化 』となっていますね。続いて下記項目についても同様に確認します。

【 変換中 】

f:id:Magidropack:20181130111527p:plain 

 

【 直接入力 】

f:id:Magidropack:20181130112944p:plain

 

【 入力文字なし 】

f:id:Magidropack:20181130111548p:plain

 

それぞれ『 IME を無効化(有効化) 』のコマンドが割り当てられていますが、半角/全角キーのデフォルトのコマンドを知る事で、無変換キーと変換キーのコマンドをそれぞれどう割り当てれば良いのかが予想出来ると思います。

 

 


【変換キーのコマンドの修正】

ではまず、実際に変換キーの割当てを変更してみましょう。Macでの挙動を再現するには、『変換キーを押すと常に日本語入力モードになる 』とすれば良いので、各モードでの『 Henkan 』の入力キーを探し出し、全て『 IME を有効化 』にしましょう。

f:id:Magidropack:20181130113328p:plain

 

【 変換入力中 】モードのコマンド欄をダブルクリックするとモードの選択が可能になりますので、『 変換 』 → 『 IME を有効化 』に変更して下さい。同様に、下記モードのコマンドも変更します。

 

【 変換中 】

『 次候補を選択 』 → 『 IME を有効化 』

 

【 直接入力 】

『 再変換 』 → 『 IME を有効化 』

 

【 入力文字なし 】

『 再変換 』 → 『 IME を有効化 』

 

これで一旦保存し、何かしらのテキスト入力モードにて変換キーを押してみて下さい。半角英数字モードから日本語入力モードに切り替わり、再度押しても日本語入力モードのままになると思います。

 

 


【無変換キーのコマンドの修正】

次に、無変換キーの割当てを変更してみましょう。こちらは、『 無変換キーを押すと常に半角英数字モードになる 』とすれば良いので、各モードでの『 Muhenkan 』の入力キーを探し出し、全て『 IME を無効化 』にしましょう。

 

【 変換入力中 】

『 ひらがな・カタカナを切替 』 → 『 IME を無効化 』

 

【 変換中 】

『ひらがな・カタカナを切替 』 → 『 IME を無効化 』

 

【 入力文字なし 】

『 次のかな文字種に入力切替 』 → 『 IME を無効化 』

 

※【 直接入力 】モードでは、『 Muhenkan 』の入力キーの項目はデフォルトだと存在していません。

 

変更が完了したら保存し、日本語入力モードの状態から無変換キーを押してみて下さい。常に半角英数字モードに切り替わると思います。 

 

 


【終わりに】

Macと違い、Ubuntu18.04では何かしらテキスト入力の状態になっていないと、入力モードの切り替えは出来ないシステムになっています。よって、どんな時でも常に入力モードの切り替えが出来る訳では無いので注意して下さい。

多少不便さが残ってしまいますが、これで一応Macとほぼ同じ要領で作業が出来ると思いますので参考にしてみて下さい。

 

以上です。