- 投稿日:2019-04-13T20:59:27+09:00
bashで拡張子を除いたファイル名を取得する
方法
長いこと
sedと組み合わせて対処してましたが
basenameコマンドだけでできることを知りました。basename {パス} {拡張子}例$ basename /path/to/somewhere/foo.txt .txt foobasename コマンド
基本
基本構文basename string [suffix]
stringの先頭から最後に出現した/までを取り除く- その結果の文字列が
suffixで終わっていればその部分を取り除くつまり拡張子に限らず次のような使い方が可能。
$ basename /path/to/somewhere/foo20190101.txt 20190101.txt fooその他
オプション-a : string を複数受け取る -s : -a オプションを付けた場合の suffix 指定複数指定できる場合の実用的な例が思いつかないですが、
上記のオプションを使ってたとえば次のようなことも可能。$ basename -s "円" -a 200円 150円 300円 200 150 300確認環境
macOS, Linux(Ubuntu) 標準の
basenameコマンド。
- 投稿日:2019-04-13T19:30:31+09:00
Goで世界にこんにちはする
はじめに
気になってたGo言語で世界に挨拶してみる
以下公式サイトのGetting Startedに沿って進めた。
Getting Started環境
macOS Mojave(v10.14.4)
homebrew v2.1.0
go v1.12.3インストール
まずはGoのインストールから
自分はHomebrewでインストールした。$ brew install goインストール成功したら、Goのワークスペースを作成する
$ cd $HOME && mkdir go※Goはデフォルトワークスペースを
$HOME/goとしているので、他のディレクトリをワークスペースにしたい場合は以下のようにGOPATHというパスを設定する必要がある
くれぐれもsource $HOME/.bash_profileを忘れずに.bash_profileexport GOPATH=$HOME/World/Japan/qiita/go【参考】
SettingGOPATH世界に挨拶してみる
ワークスペースを作成したらソース用ディレクトリを用意する。
$ cd $HOME/go # もしくは $ cd $GOPATH mkdir -p src/helloソースコードは以下を作成する。
hello.gopackage main import "fmt" func main() { fmt.Printf("こんにちは, 世界\n") }
packageは名前空間1を示し、importで依存パッケージを取り込むための指定を行っている。
そして、funcで関数の宣言を行い、fmt.Printfでコンソール出力を行うようだ。ちなみに、Go言語はpackage mainのmain関数をエントリーポイント2として扱うので、名前空間と関数宣言がそれぞれ
mainになっている。実行するときは
go run ファイル名
なお、ビルドして実行ファイルを作成したい場合は対象のファイル名を含んだディレクトリ内でgo buildを実行する。$ go run hello.go こんにちは, 世界世界に挨拶できたらこっちのもんだ
これで僕も君も今日からGo使い。
- 投稿日:2019-04-13T19:30:31+09:00
Goで世界にこんにちはする HelloWorld
はじめに
気になってたGo言語で世界に挨拶してみる
以下公式サイトのGetting Startedに沿って進めた。
Getting Started環境
macOS Mojave(v10.14.4)
homebrew v2.1.0
go v1.12.3インストール
まずはGoのインストールから
自分はHomebrewでインストールした。$ brew install goインストール成功したら、Goのワークスペースを作成する
$ cd $HOME && mkdir go※Goはデフォルトワークスペースを
$HOME/goとしているので、他のディレクトリをワークスペースにしたい場合は以下のようにGOPATHというパスを設定する必要がある
くれぐれもsource $HOME/.bash_profileを忘れずに.bash_profileexport GOPATH=$HOME/World/Japan/qiita/go【参考】
SettingGOPATH世界に挨拶してみる
ワークスペースを作成したらソース用ディレクトリを用意する。
$ cd $HOME/go # もしくは $ cd $GOPATH mkdir -p src/helloソースコードは以下を作成する。
hello.gopackage main import "fmt" func main() { fmt.Printf("こんにちは, 世界\n") }
packageは名前空間1を示し、importで依存パッケージを取り込むための指定を行っている。
そして、funcで関数の宣言を行い、fmt.Printfでコンソール出力を行うようだ。ちなみに、Go言語はpackage mainのmain関数をエントリーポイント2として扱うので、名前空間と関数宣言がそれぞれ
mainになっている。実行するときは
go run ファイル名
なお、ビルドして実行ファイルを作成したい場合は対象のファイル名を含んだディレクトリ内でgo buildを実行する。$ go run hello.go こんにちは, 世界世界に挨拶できたらこっちのもんだ
これで僕も君も今日からGo使い。
- 投稿日:2019-04-13T18:28:46+09:00
[Rust]Actixインストール手順
1. Rustのインストール
https://www.rust-lang.org/tools/install
こちらで推奨されている通り、下記コマンドでインストールします。curl https://sh.rustup.rs -sSf | sh下記の通り、コンソールログが表示されます。
kanayatBookpuro:~ taichikanaya$ curl https://sh.rustup.rs -sSf | sh info: downloading installer Welcome to Rust! This will download and install the official compiler for the Rust programming language, and its package manager, Cargo. It will add the cargo, rustc, rustup and other commands to Cargo's bin directory, located at: /Users/taichikanaya/.cargo/bin This path will then be added to your PATH environment variable by modifying the profile files located at: /Users/taichikanaya/.profile /Users/taichikanaya/.bash_profile You can uninstall at any time with rustup self uninstall and these changes will be reverted. Current installation options: default host triple: x86_64-apple-darwin default toolchain: stable modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation >上記で止まりますので、1を入れてEnter押下します。そしてしばらく待ちます。
>1 info: syncing channel updates for 'stable-x86_64-apple-darwin' info: latest update on 2019-04-11, rust version 1.34.0 (91856ed52 2019-04-10) info: downloading component 'rustc' 78.9 MiB / 78.9 MiB (100 %) 1.7 MiB/s ETA: 0 s info: downloading component 'rust-std' 51.1 MiB / 51.1 MiB (100 %) 1.6 MiB/s ETA: 0 s info: downloading component 'cargo' 3.4 MiB / 3.4 MiB (100 %) 1.6 MiB/s ETA: 0 s info: downloading component 'rust-docs' 10.2 MiB / 10.2 MiB (100 %) 1.5 MiB/s ETA: 0 s info: installing component 'rustc' 78.9 MiB / 78.9 MiB (100 %) 10.8 MiB/s ETA: 0 s info: installing component 'rust-std' 51.1 MiB / 51.1 MiB (100 %) 16.0 MiB/s ETA: 0 s info: installing component 'cargo' info: installing component 'rust-docs' 10.2 MiB / 10.2 MiB (100 %) 1.0 MiB/s ETA: 0 s info: default toolchain set to 'stable' stable installed - rustc 1.34.0 (91856ed52 2019-04-10) Rust is installed now. Great! To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH environment variable. Next time you log in this will be done automatically. To configure your current shell run source $HOME/.cargo/env kanayatBookpuro:~ taichikanaya$2. IntelliJで新規Rustプロジェクト作成
https://github.com/intellij-rust/intellij-rust
こちらに載っている通り、IntelliJにRustプラグインを入れます。
・Toolchain locationにはRustのパスを設定します。
・Standard libraryはToolchain locationを入れると「rust up」リンクが表示されますので、
それをクリックすると自動設定されます。
3. Cargo.tomlにactix設定追加
https://actix.rs/docs/installation/
こちらを参考に、dependenciesを追記します。Cargo.toml[package] name = "xxxxxxx" version = "0.1.0" authors = ["xxxxxxxxx"] edition = "2018" [dependencies] actix-web = "0.7" # これを追加4. main.rsを実装
indexはhttpリクエストの受け口です。
mainではAPサーバを起動しています。main.rsextern crate actix_web; use actix_web::{server, App, HttpRequest}; fn index(_req: &HttpRequest) -> &'static str { "Hello world!" } fn main() { server::new(|| App::new().resource("/", |r| r.f(index))) .bind("127.0.0.1:8088") .unwrap() .run(); }5. いざ実行
cargo.tomlのあるディレクトリまで移動してから下記コマンドを実行します。
cargo run6. Webブラウザからアクセス
- 投稿日:2019-04-13T18:22:51+09:00
command phasescriptexecution failed with a nonzero exit code エラーとの戦い
- 投稿日:2019-04-13T12:59:22+09:00
Appleの配送修理で修理後の追跡伝票番号を確認する方法
Apple 製品を配送修理して、修理後の発送完了メールには「配達伝票番号:」とありますが、番号が書かれていません。メール内の URL を開いても番号はありません。
↓
Apple ID でログインすることで詳細情報を見られるようになります。
https://mysupport.apple.com/?selectedLocale=ja_JP
- 投稿日:2019-04-13T11:23:26+09:00
mac に root 権限で npm モジュールをグローバルインストールする
mac で TypeScript を使えるようにしようとして手間取った。
Node.js をインストール
Node.js 本体を https://nodejs.org/ からダウンロードしてインストールする。
インストールには管理者権限が必要。npm のモジュールをグローバルインストール…失敗
ターミナルで
npm install -g typescriptを実行。
…インストール先ディレクトリーに権限がないということで失敗。
ターミナルでの入出力
bash
$ npm install -g typescript
npm ERR! path ../lib/node_modules/typescript/bin/tsc
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall symlink
npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules/typescript/bin/tsc' -> '/usr/local/bin/tsc'
npm ERR! { [Error: EACCES: permission denied, symlink '../lib/node_modules/typescript/bin/tsc' -> '/usr/local/bin/tsc']
npm ERR! cause:
npm ERR! { Error: EACCES: permission denied, symlink '../lib/node_modules/typescript/bin/tsc' -> '/usr/local/bin/tsc'
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'symlink',
npm ERR! path: '../lib/node_modules/typescript/bin/tsc',
npm ERR! dest: '/usr/local/bin/tsc' },
npm ERR! stack:
npm ERR! 'Error: EACCES: permission denied, symlink \'../lib/node_modules/typescript/bin/tsc\' -> \'/usr/local/bin/tsc\'',
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'symlink',
npm ERR! path: '../lib/node_modules/typescript/bin/tsc',
npm ERR! dest: '/usr/local/bin/tsc' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/sdkei/.npm/_logs/2019-04-13T01_16_55_245Z-debug.log
root のパスワード?
Node.js が root 権限でインストールされていたので、
npm install -g typescriptも root ユーザーで実行する必要があった。
じゃあsudoで…。
あれ、root ユーザーのパスワードとか知らんぞ?
管理者アカウントは root アカウントとは違うしな。
mac rootでggる。
↓
Mac でルートユーザを有効にする方法やルートパスワードを変更する方法システム環境設定から root ユーザーを有効にして(そのときにパスワードも設定する)、
それから root ユーザーを使い、
作業が終わったらまた無効にするとのこと。やってみる
まずシステム環境設定から root ユーザーを有効化・パスワード設定して…。
sudoでnpm installを実行する。$ sudo npm install -g typescript /usr/local/bin/tsserver -> /usr/local/lib/node_modules/typescript/bin/tsserver /usr/local/bin/tsc -> /usr/local/lib/node_modules/typescript/bin/tsc + typescript@3.4.3(実行した時点でパスワードを聞かれる。)
インストールできたようなので root ユーザーを無効に戻す。
typescript モジュールがインストールされたことを確認する。
$ tsc --version Version 3.4.3成功!
- 投稿日:2019-04-13T02:27:01+09:00
remove Loopback audio from device list
soundflowerを探す過程でloopback audioというsoftwareを試した.
しかし, 結局, loopback audioは不要ということになったので, applicationから削除した.
だが, soundのdevice listにloopback audioが残ってしまった.
サウンドデバイスから削除できない諸問題を解決した。[Soundflowerとか]
の方法ではloopback audioのkextが見つからず削除できなかった.本記事はその解決方法の備忘録.
公式
にあるように,
loopback audioのinstallerを立ち上げて, そこでunistallを実行してやるとちゃんと消えた.
- 投稿日:2019-04-13T01:51:08+09:00
なかなか入門できなかった人のためのdocker(+go)入門以前 part1
まえがき
goのプログラムをdockerで動かしたい、あわよくばk8sでデプロイしたいシリーズ第二弾です。
この part1 では、docker runしてdocker上でプログラムを動作させるところまでを扱います。
流行りのdockerですが、なかなか波に乗り切れず、ローカル開発環境の方が簡単じゃない? と思ってしまっているうちにだいぶ時間が経ってしまいました。
これ以上化石になってしまわないように、なんとかdockerに入門したい。あわよくばgoを動かしたい。そんな記事です。
なお、先々にk8sでのデプロイを目論んでいる関係もあり、この記事ではdocker-compose1を扱いません。
想定読者
- dockerよくわからない
- docker使いたい
- 急に複雑な構成が出てきても困る
- オプションとかの細かい説明や「これが最強だ」みたいなハイテクコマンドが出てくると理解を拒否してしまう
- ローカル環境やVagrantでなら非常に初歩的なことで躓いてdocker入門しきれてない
- 環境構築的には、Vagrantfile(そこまで深くはわからんけど)いじったことあるよーぐらいのレベルの人
あまり想定していない読者
- docker-composeの使い方を学びたい
- docker-composeに限りませんが、しっかり学びたい方はこの記事とかすごいです いまさらDockerに入門したので分かりやすくまとめます
- goの最低限の動かし方を知りたい
- 第一弾の記事を前提にこの記事では説明を進めるので、記事内でのgoに関する説明はあまりありません
- webサーバーとか仮想環境とかなんのことだかよくわからない、ぐらいのレベルの人
- ローカルwebサーバーとしてのdockerの立ち上げ方の説明を試みているので、そのあたりの前提になっている知識の説明が少ない可能性があります。
- Windowsの方
- 筆者がMacを使っていてMacの環境を前提に説明するので、Windowsの方に全然優しくない説明の可能性が高いです
dockerの特徴について
以下のような特徴があり、旧来の勢力であるローカル開発環境やVagrantのいいとこ取りがしやすいとのことで、近年急激に普及してきています。
- 配布可能な仮想環境
- DockerfileによってIac(Infrastructure as Code)が実現でき、共通の開発環境を簡単に配布できます
- コンテナ型仮想化
- Kubernetes(通称k8s)などのコンテナオーケストレーションサービスとの連携
- 連携しやすかったです(感想)。GKEでは作ったコンテナをCloud Registryに追加して画面ぽちぽちするだけでデプロイできました。
- よりスケーラブルな話はまたいつか
以下の記事の方がよりわかりやすかったり、詳しかったりしそうです。
さて、入門以前に入っていきましょう。
動かすまでの手順というイメージです。dockerをインストールする
docker公式サイトからインストールしてきましょう。
右上のGet Startedから、Get Started with Dockerのページに行って、
Download for Macをクリックします。DockerHubのDocker Desktop for Macというページに飛ばされるので、サインアップなどを済ませて
Get Dockerしましょう。
Docker.dmgというファイルがダウンロードできたら、展開してインストールを進めます。
しばらくGUIの指示に従ってインストールを進めると、処理が完了しdockerが使えるようになります。terminal上で
docker -vとして、
Docker version 18.09.2, build 6247962のような表示が出れば成功です。(インストールだけは昔からしているので、↑はちょっと古いかも)
dockerを動かす
dockerを動かすまでには、いくつかのステップがあります。
最低限以下のことがわかっていれば、dockerを試すところまではいけると思います。
- docker imageを取得する
- docker imageからコンテナを起動する
それでは早速やっていきましょう。
docker imageを取得する
以下のコマンドを打てば取得できます。
docker pull golang:1.12.3-alpine3.9このコマンドについてもうちょっとだけ説明していきます。
まず、docker pull image名:タグ名とすることで、 docker registry と呼ばれる docker image が保管されている場所から docker image を取得してくることができます。
取得してきた docker image の一覧は
docker imagesを実行することで確認できます。
docker imageってなに?
とはいえ docker image って何よ、という話なのですが、端的にいうと「サーバーの設計書」です。
docker は docker image があれば、 docker container と呼ばれるサーバーをセットアップし、起動することができるのです。今回でいうと、
golangというのが docker image の名称になります。docker imageのタグについて
では、例にあるコマンドの
1.12.3-alpine3.9ってなんなのでしょうか。
これはタグと呼ばれる情報で、取得するイメージのバージョンや環境などを選択できます。
1.12.3の部分はgoのバージョンを表しています。そのあとはモノによるのですが、今回のように追加情報が記載されていることがあります。
stretch と alpine について
golangイメージには主だったものでstretch系とalpine系のタグが存在します。タグごとに docker image を定義している Dockerfile の記載が異なるので、動作が異なります。
stretch系はdebian系のimageで、 g++, gcc, libc あたりの機能をはじめにインストールしているみたいです。純粋にgolangを動かしたい方に向いている印象です。alpine系はlinux系のimageで、あらかじめ bash, openssl などをインストールしているため通信系の機能などを含むアプリケーションの場合は取り回しがしやすいです。簡易的にWebAPIを作りたいようなときはこちらが便利そうですね。
色々と使いやすいのもあり、今回は
1.12.3-alpine3.9を利用します。なお、Dockerfileのレベルで確認したい方は以下のリンクが参考になります。
docker、最初はとっつきづらいなと思っていたんですが、慣れてくるとあらゆる情報がDockerHubなどを通じて公開されているのでこういうところがとても追いかけやすいなあ、と感じました。docker imageからコンテナを起動する
docker run image名:タグ名で起動できます4。
このコマンドで起動され立ち上がったサーバーのことを、 dockerコンテナと呼びます。
起動時の動作に指定がない docker image の場合、上記のコマンドは成功しますがその後何も起きません。
コンテナ起動時には、パターンに応じて以下のオプションを理解しておくと良いと思います。
dockerコンテナのなかでbash等のコマンドを実行したい
bashなどのコマンドを実行したい場合、 -it オプションを用います。5
docker run -it image名:タグ名dockerコンテナをホストマシンのディレクトリでマウントして、webサーバーとして起動したい
開発用のwebサーバーとしてdockerコンテナを起動したい場合、
- 手元のコードを反映してほしい
- ローカルマシンから localhost:8080 とかでアクセスできるサーバーとして立ち上がってほしい
というニーズがあると思います。
その実現にあたっては、ざっくり以下のことを把握しておくと良いと思います。
- -p オプションで port forwarding
- -v オプションで マウント元とマウント先の指定
- -e オプションで 環境変数の指定
- -d オプションで バックグラウンド実行
- -it オプション + image:tag の後にコマンドを記載することで、webサーバー起動コマンドの流し込み
上記を踏まえた実行時のterminalのイメージは以下のような感じ。
/path/to/hostや/path/to/dockerは仮のパスなので適宜読み替えてくださいませ。docker run -it \ # コンテナ内部に入ってbashの操作を行う。最終行でコマンド指定 -p 8080:8080 \ # ホストマシンのポートとdockerコンテナのポートを接続する。 -v /path/to/host/go:/path/to/docker/go \ # ホストマシンのディレクトリ情報でdockerコンテナの中身をマウントする。フルパスじゃないと動かないかも -e ENV_VARIABLE=env_value \ # 環境変数の指定 -e ENV_VARIABLE2=env_value2 \ # 環境変数を複数指定する場合は繰り返し用いる -d \ # バックグラウンド実行 image:tag \ # 使用するdocker imageの指定。確か公式リポジトリにあるやつならdocker runするときに取ってきてくれる go run main.go /path/to/docker/go/main.go # 実行するコマンド。 -it コマンドの初期値として与えることができるなお、
docker runの際にはタグ名を省略することもできますが、同じ名称のimageを複数pullしてきている場合はタグまで書いた方がわかりやすいです。ここで起動されたサーバーのことをdocker containerと呼びます。
なお、コンテナを動かすにあたっては、こちらの記事がより参考になります。コマンドの実例集は本当にありがたい。。
起動したコンテナを使って開発や動作確認をする
動く docker run コマンドの例を書いてみます。
とりあえず動かしたい! という方は真似してみてください。事前に、上記のdocker imageを取得しておいてください。
一旦仮定として、以下のパスにいることにしましょう。
/YOUR_USER_NAMEやtestprojectは適宜読み替えをお願いします。
また、 $GOPATH は~/goという仮定で話を進めます。pwd #=> /Users/YOUR_USER_NAME/go/src/github.com/testproject/ここでいつものサンプルを作成します。
/Users/YOUR_USER_NAME/go/src/github.com/testproject/main.gopackage main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 }この状態で、以下のようなコマンドを実行します。
docker run -it \ -p 8080:8080 \ -v /Users/YOUR_USER_NAME/go/src/github.com/testproject:/go/src/github.com/testproject \ golang:1.12.3-alpine3.9 \ go run /go/src/github.com/testproject/main.goこれを実行すると、 docker image を元にした docker container が起動し、ローカルサーバーが立ち上がります。
localhost:8080/ping
にアクセスして、
{"message": "pong"}のレスポンスが返ってくれば成功です。その他のコマンドについて
以下を覚えておくと入門以前のレベルとしては十分だと思います。
docker images # 手元にある docker image が確認できる docker rmi [IMAGE ID] # 指定したimageが削除できる。IMAGE IDは docker images で確認できる docker ps # 起動中のコンテナが確認できる docker kill [CONTAINER ID] # 指定したcontainerを停止できる。CONTAINER IDは docker ps で確認できるDockerfile使ったりdocker buildしたりしたい。そしてコンテナをデプロイしたい
そんな感じで、dockerのなんとなくの概要とかをまとめつつ、docker runでサーバーが起動するところまでを駆け足でまとめてみました。
Dockerfileってなに?
手元で動くだけじゃ困るんだけど?
みたいな悩みが本番デプロイやdocker imageの配布などを行いたい人には発生すると思うのですが、これは次回以降に続きます。続け!
docker-composeとは、複数のdockerコンテナ(記事内で言及予定)を構成管理できるツールです。よくセットで出てくるけどdockerに対するメタツールなので必須ではないものです。例えばWebアプリケーションサーバーとしてのコンテナと、MySQLサーバーとしてのコンテナを同時に立ち上げ、接続設定まで済ませるといったことが可能です。この記事ではできる限りシンプルにdockerの動かし方を学びたい(しかもこれ書いてる人もdocker-composeよくわかってない)ため、言及していません ↩
完全に余談ですが、シミュレートは内部の動作を再現すること、エミュレートは目に見える動作を再現することを指すらしく、位置付けがけっこう異なるようです。高度に完成されたシミュレーションとエミュレーションは同じ結果をもたらす、とも言われています。 ↩
IE8を再現するためのVirtualBoxイメージとかね・・・ ↩
Vagrantでの
vagrant upにあたります ↩Vagrantでの
vagrant up → vagrant sshにあたります ↩
- 投稿日:2019-04-13T00:41:46+09:00
Downgrade Java MacOS
After install Java check what versions do you have:
$ java --versionSomething like this will appear:
Matching Java Virtual Machines (2): 12, x86_64: "Java SE 12" /Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home 11.0.2, x86_64: "Java SE 11.0.2" /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/HomeSelect the version you want:
/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Homeopen your bash to edit:
$ sudo vi ~/.bash_profileand add this line:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Homeupdate your bash:
source ~/.bash_profileconfirm:
$ java --version




