No Programming, No Life

プログラミング関連の話題や雑記

Pythonのmac(Mojave 10.14.5)へのインストール

私はmacを使っているので、こちらを参考にHomebrew + pyenvでv3系で最新の3.7.3をインストールしてみました。 ちなみに途中、うまくインストールが進行しなかったので、ここ を参考に解決しました。

前提

環境:macOS Mojave バージョン 10.14.5

Homebrewは最新版。

pyenvのインストール

$ brew pyenv install 

~/.bash_profile に以下を追記

export PYENV_ROOT=${HOME}/.pyenv
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

pyenvでインストール可能な一覧を確認

$ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  (中略)
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.7.3
  3.8-dev
  (中略)
  stackless-3.4.2
  stackless-3.4.7
  stackless-3.5.4

pyenvで使用するバージョンのインストール

$ pyenv install 3.7.3

pyenvでインストールされたバージョンの確認

pyenvでインストールされたPythonは、~/.pyenv以下にインストールされる。 インストールされているバージョンを確認。

$ pyenv versions
* system
  3.7.3 (set by /Users/(ユーザ名)/.pyenv/version)

使用するバージョンを確定

$ pyenv global 3.7.3
$ pyenv versions
  system
* 3.7.3 (set by /Users/(ユーザ名)/.pyenv/version)
$ python --version
Python 3.7.3

これでOK。

参考

Python3インストール(Mac編) - Qiita

MacOS mojaveでpyenvを使ってpythonがインストールできない時 - Qiita

Ruby3 - Rubyの基礎文法 - 条件分岐

概要

ここでは、Rubyの条件分岐の文法について見ていきます。 Rubyでの条件分岐には if else elsifunless 使います。caseも使えます。少し変わりどころだと、後置if, 後置unlessもあります。

if文

まずは if ですが、以下のように記述し、条件 の場合に 処理 が実行されます。 条件 でない場合は処理は実行されません。

if 条件 then
  処理
end

ちなみに、thenは省略可能で、以下のようにも書けます。

if 条件
  処理
end

こちらの方がスッキリしていますね。

実行例)

ifels1.rb

a = 10
if a > 5 then
  puts 'aは5より大きい'
end
$ ruby ifels1.rb 
aは5より大きい

else文

if条件に合致する場合でしたが、else条件に合致しなかった場合に処理をさせたい場合に使います。

if 条件 then
  処理1
else
  処理2
end

この場合だと、 条件に合致しなければ、処理2の部分が実行されます。

実行例)

ifels2.rb

a = 3
if a > 5 then
  puts 'aは5より大きい'
else
  puts 'aは5より大きくない'
end
$ ruby ifels2.rb
aは5より大きくない

elsif文

ifの条件は満たさなかった時に、その次に判定する条件を書きたい場合にはelsifを使います。

ifels3.rb

a = 40
if a > 50 then
  puts 'aは50より大きい'
elsif a > 20 then
  puts 'aは50より大きくはないが、20よりは大きい'
else
  puts 'aは20以下'
end
$ ruby ifels3.rb
aは50より大きくはないが、20よりは大きい

unless文

ifの逆の構文になります。〜じゃなかったら処理を実行するといった感じです。 unless1.rb

a = 10
unless a > 10 then
  puts 'aは10より大きくない'
end
$ ruby unless1.rb
aは10より大きくない

ちなみにunlessにはelseは付けられますが、elsifは付けられません。

後置if, 後置unless

式の末尾にif 条件 や unless 条件 を置いて、条件 が真、または偽なら前部分の式を実行するというクールなやつです。利用はお好みで。

if_unless_modifier1.rb

a = 10
puts 'aは10以上です' if a >= 10

この場合だと puts 〜 の部分が実行されるかどうかは aの値による感じです。

$ ruby if_unless_modifier1.rb 
aは10以上です

if_unless_modifier2.rb

a = 10
puts 'aは10より大きくない' unless a > 10
$ ruby if_unless_modifier2.rb 
aは10より大きくない

case文

caseは複数の条件分岐を一気にこなしたい場合に利用します。caseの後に比較したい を置いて、whenの後に置いたとマッチする場合、その処理が実行されます。whenは複数配置でき、すべてのwhenにマッチしなかった場合はelseに書いた処理が実行されます。

casewhen1 then
  処理1
when2 then
  処理2
else
  処理その他
end

ちなみに、お察しの通りthenは省略できます。 また、whenの後の値はカンマで区切ると複数指定できます。

casewhen1, 値2 then
  処理1
when3, 値4 then
  処理2
else
処理その他
end

使用例)

case1.rb

age = 14
case age
when 0, 1, 2
  puts "赤ちゃん"
when 3 .. 6
  puts "幼児"
when 7 .. 12
  puts "小学生"
when 13 .. 18
  puts "中高生"
else
  puts "大人!"
end
$ ruby case1.rb 
中高生

参考

Ruby if...else, case, unless

ruby unless文にelsifはないよ。。。 - Qiita

関連記事

Rubyのチュートリアルっぽい記事の一覧 - No Programming, No Life

Ruby2 - Rubyの基礎文法

概要

ここではRubyの基礎文法についてまとめていきたいと思います。

文字列

文字列はシングルクォーテーション ' もしくはダブルクォーテーション " で囲む。

puts 'Hello!'
puts "Hello!"

文字列の連結

文字列を連結するには + を使う。

puts 'あいう' + 'えお' # => あいうえお

コメント

コメントにはシャープ # を使う。その行#の後ろ部分がコメントになる。 行の先頭に # を置けば、まるまるコメント行になる。

# ここはコメント
puts 'Hello!' # これもコメント

数値と様々な計算

Rubyで数値を扱うには、単に数値を書くだけ。 足し算は +、引き算は -、掛け算は *、割り算は /、余りは % が使える。

puts 2 + 3 # => 5
puts 7 - 4 # => 3
puts 13 * 9 # => 117
puts 32 / 8 # => 4
puts 18 % 5 # => 3

条件分岐

条件分岐は別記事にしました。

Ruby3 - Rubyの基礎文法 - 条件分岐 - No Programming, No Life

関連記事

Rubyのチュートリアルっぽい記事の一覧 - No Programming, No Life

Ruby1 - プログラミング言語Rubyの概要

概要

REPL

irb コマンドにて。

実行例

$ irb
irb(main):001:0> a = 10
=> 10
irb(main):002:0> b = 20
=> 20
irb(main):003:0> c = a + b
=> 30
irb(main):004:0> p c
30
=> 30
irb(main):005:0> 

ドキュメント

ri コマンドにて。

例)

ri Array

参考サイト

https://dotinstall.com/lessons/basic_ruby_v3/37101

関連記事

Rubyのチュートリアルっぽい記事の一覧 - No Programming, No Life

コードを自動生成するか否か

メッセージIDのenumなどを作る際に、定義書から自動生成する場合がある。

こういったボイラープレートは自動生成で逃げるのが良いかもしれないのだが、その自動生成ツールなり、スクリプトなりが後からきちんと運用されなくなったりする場合を考えると、なかなか難しいところである。

また、例えば、定義一覧のような設計書から定義内容を自動生成するような場合、たとえば区分が一つ増えたときに、どういったプログラムコードに変換するのかといったようは、単純に設計書の修正だけでなく、最終的に生成されるプログラムコードのことも考えて、拡張してゆかなければならなくなる。
こういったことが、前述のように、運用されなくなる要因の一つでもあるように思う。

やはり、プログラムコードというのは職人の仕上げる飴細工のように繊細なものなのだと思う。

引き継ぎ者不在のシステム

私が前に携わっていたシステムで、専任して保守してい方が、会社を退職されるらしい。

体力のある会社であれが後任をすぐに立てられるんだろうけど、そこそこの規模の会社さんだとそうも行かないらしい。
私にも、元開発者だったということで、またお仕事の話がくるかも知れない。

偏りはあるかもしれないが、システム開発会社のような会社の週報が、紙ベースであったりと、色々と世の中まだまだだなぁと思うところはありますが、この引き継ぎ者不在のシステムの未来はどうなるんだろうか。