アウトプットを頑張る

初めてのプログラミング学習期間中の記録と、日頃読んでいる本をメモのアウトプットをがんばります。

【読書】中国オンラインビジネスモデル図鑑

■読書

f:id:yuma6128:20211010075119j:plain

 

 

こちらの本は、中国で人気のアプリを60個厳選し、そのビジネスモデルや機能、マーケティング施策や資金調達などの情報が図解や画像でわかりやすく説明されていました。

その中で個人的に気になったものを一部ピックアップしていきます。

 

◎zhishixingqiu

最初は誰でも簡単にオンラインサロンが作れて、運営できるというアプリです。
コミュニティのジャンルがto C向けだけでなく、ビジネスや技術系など多岐に渡っている。
ランキング機能やアプリ内通貨もあり、他にもコミュニティ活性化の機能があり、
このアプリ内だけでコミュニティ活動が完結できるのが強みなのではと思いました。

◎Xianyu

アリババが運営するフリマアプリで、中古品の売買だけでなく、レンタル事業もやっているとのことです。
アリババの信用スコア「セサミクレジット」と出品者が表示されているとのことで、
落札者側は安心だと思いました。
フリマアプリ内に、コミュニティ機能があり趣味嗜好の同じ人同士でコミュニケーションが取れるため、その中でグッズの売買が成立とユーザーの囲い込みができるというのが強みですね。

 

◎Meicai

農家と飲食店の間をつなぐ、仕入れ・配送サービスです。
アプリで必要な野菜の量を入力するだけで、小ロットでも配送してくれるのと、販売データに基づいて仕入れ量を決めるアルゴリズムを採用することで、供給過多や供給不足のミスマッチを解消している。

 

◎コラムまとめ

途中にかかれているコラムも大変勉強になりました。
・なぜ多機能なのか?
中国と日本のアプリの制作過程の違いについての説明も確かにと思いました。
中国 → アプリを作る → ユーザーを増やす → 利益を上げる方法を考える
日本 → どうやったら良いアプリか計画する → アプリを作る → ユーザー増やす方法を考える
日本のやり方の場合は、アプリの仕様を決めてスタートするのとかつ、アプリ開発が害虫のため追加機能ができにくく、中国は自社開発でアップデートや新たな機能付加が容易にできる強みがある。

・コミュニティ機能搭載理由

ユーザー数を伸ばすことが必須のため、そのために新規ユーザー獲得と既存ユーザーの利用継続率の向上が鍵になる。そのためアプリ内での人間関係の構築のためにもコミュニティ機能を搭載。
自社開発のため、コストも日本の1/5程度ですむため、SNS機能実装の高い開発コストも削減できる。

・セサミクレジットとは?

中国社会において、「信用 = お金」という概念を人々に浸透させた個人信用評価システムです。
預金額、保有株式などの資産、購買履歴、ローン返済や公共料金の支払状況、趣味、SNS上の人脈、犯罪歴など個人情報を組み合わせてその人の信用度を数値化する仕組みになります。

本書を読んでみて改めて中国の成長と、アプリの種類の多さなどに圧巻されました。
ここから日本のビジネスでも使えるものなども見つけていきたいと思います。

【プログラミング学習】クラスの理解

■プログラミング学習 f:id:yuma6128:20211124200006j:plain

クラスの継承
Rubyでは、データの元になる設計図(クラス)を作り、その設計図を元に実態となるデータ(インスタンス)を作るというのが手順になります。
このクラスに親子関係を作ることをクラスの継承と呼びます
親子関係とは、既存のクラスの情報を元に新しいクラスを作ることを指しています。
このときの、新しいクラスを子クラス(またはサブクラス)、元になった既存のクラスを親クラス(またはスーパークラス)と呼びます。
クラスの継承がなぜ必要なのか。
答えは、クラスの継承を使うことで、共通する部分をまとめることができ、効率的になるからです。

例えば、たんぽぽ、ひまわり、コスモスのクラスを作成するなら、3つに共通する情報をまとめた花というクラスを 作成し、その花クラスを継承したクラスを作成したほうが効率的です。
そうすれば、各クラスは花が共通して持つ情報を引き続きつつ、それぞれ独自の情報を持つことができます

class Flower
  def initialize(flower_type,color)
    @name = flower_type
    @color = color
  end

  def info
    puts "種類:#{@name}、色:#{@color}"
  end
end

class Dandelions < Flower
  
end

dandelions = Dandelions.new("たんぽぽ","黄色")
dandelions.info
# ターミナル出力結果
# 種類:たんぽぽ、色:黄色

上記の通りで、Dandelionsのクラスには、何も記述していませんが、継承元のFlowerクラスのインスタンス変数及び インスタンスメソッドを使うことができます。

子クラスに独自のインスタンスメソッド追加
こちらは子クラスに新しくメソッドを定義するだけになります。

class Flower
  def initialize(flower_type,color)
    @name = flower_type
    @color = color
  end

  def info
    puts "種類:#{@name}、色:#{@color}"
  end
end

class Dandelions < Flower
  def season
   puts ""
  end
end

dandelions = Dandelions.new("たんぽぽ","黄色")
dandelions.season

# ターミナル出力結果
# 春

こちらは、Dandelionsクラス内に、seasonメソッドを新たに追加し、それを実行しています。
このように子クラスにインスタンスメソッドを追加することで、そのクラス固有のメソッドを定義することができます。

オーバーライド
親クラスにあるメソッドと同じ名前のメソッドを子クラスで定義すると、メソッドを上書きすることができます。
これをメソッドのオーバーライドといいます。

class Flower
  def initialize(flower_type,color)
    @name = flower_type
    @color = color
  end

  def info
    puts "種類:#{@name}、色:#{@color}"
  end
end

class Dandelions < Flower
  def info
    puts "種類:#{@name}、色:#{@color},属名はタラクサクム属"
   end

  def season
   puts ""
  end
end

dandelions = Dandelions.new("たんぽぽ","黄色")
dandelions.info
# ターミナル出力結果
# 種類:たんぽぽ、色:黄色,属名はタラクサクム属

上記の通り、Flowerクラスで定義されたinfoメソッドと同名のメソッドをDandelionsのクラス内で定義をしています。
これによって、Dandelionsのクラスを元に生成されたインスタンスでinfoメソッドを実行すると上書きされて処理が実行されるようになります。

【読書】幸福の増税論-財政はだれのために

■読書 f:id:yuma6128:20211010075119j:plain

感想 本書を先日アクティブ・ブック・ダイアローグ®ABD読書会にて、 拝読したので、そちらをまとめていければと思います。

私が読んだパートは第2章の「中の下の反乱」という章になります。
f:id:yuma6128:20211125073935p:plainf:id:yuma6128:20211125073938p:plain 大勢の人びとが生活不安に直面している今の状況を乗り越えるために、 懸命な努力が続いているが、そこでの方法は↑の2つによるアプローチになる。 ただし、両方とも選択肢となりえない状況に置かれている。
その中で置き去れにされている中の下〜下の上〜下の下の代表されない人たちが 連携し、社会的弱者を見殺しにしない形での新たなリベラルを構想できるのか。 といった問で第2章は閉じられていた。

【他の方がまとめた他の章から気になったことピックアップ】
◎第1章鳴り響く「一億総勤労社会」の号砲
生活保護の利用者がスウェーデン8割、フランス9割(当然の権利)
日本は2割未満、勤労の美徳が不勤労の不道徳と背中合わせ
生活水準の低下、将来への不安、国際的な地位の劣化(OECD加盟国 90年代2位→2017年18位)

◎第3章 再分配革命―頼り合える社会へ
ベーシックサービスの導入 →受益者を増えることで、他社を信頼できるシステム作り
格差を理由にするから、痛みを分かち合う
◎第4章 貯蓄ゼロでも不安ゼロ
無駄をなくしても財政再建につながらない 税 → 取られるもの / 貯蓄→資産と考える人が多い
税を通じて、社会の蓄えをつくる社会
◎第5章 「生の保障」を軸とした分配の大転換
*低所得者は、消費税などがあがったときに、収入をほぼ消費に使ってしまう 一方で、高所得者は、ある程度消費の割合をコントロールできる。

◎第6章 選択不能社会を終わらせる
人口減少時代をどう生きるか?
生きるため、暮らすために支え合う

など内容として、税金の話をする本かと思っていましたが、内容として 現代の社会に対して、利己的になりすぎていて、自分だけを考えることをやめ もっと協力をしていくことを考えさせる本でした。
改めて自分でも全部読んでいますので、追記がありましたら、別の記事を作成いたします。

【プログラミング学習】Rubyのブロックについて

■プログラミング学習 f:id:yuma6128:20211120210756j:plainブロックとは
do~ endまでをRubyではブロックと呼びます。また||の部分で囲んだ部分をブロック変数と言います。

fruits = ["apple","orange","strawberry"]

fruits.each do |fruit|
 puts fruit
end

Rubyに標準で組み込まれているeachメソッドは、ブロックを引数として受け取るメソッドの代表例になります。
eachメソッドは、do ~ endの配列の要素の数だけ処理を繰り返す
ブロックには2種類書き方がある。
1つめは「do ~ end」 2つめは{ }を用いて書き換えたたものです。
{ }の中身は改行しても問題ありません。

# 上の例から 改行なし
fruits.each { |fruit| puts fruit }

# 上の例から 改行あり
fruits.each { |fruit|
puts fruit
}

do ~ end と{ }をどちらを使うか、明確な決まりはありません。
しかし、改行を含む長いコードの場合は、do~ end
1行で収める場合は{}を使うことが多いです。
自分で定義したブロックの使い方
Rubyはtimesメソッドやeachメソッド以外にも、多くのメソッドでブロックが用いられています。
ブロックはRubyで元から定義されているメソッド以外でも利用することができます。

def greeting
 puts "こんにちは"
end

greeting
# ターミナル出力結果
# こんにちは

以下はブロックを追加したものイメージです。

def greeting
 puts "こんにちは"
end

greeting do
 puts "さようなら"
end
# ターミナル出力結果
# こんにちは

ブロックを付けてみても、結果はかわりません。
メソッドに渡したブロックを実行するには、以下のように定義内にyieldを記述が必要です。

def greeting
puts "こんにちは"
yield
end

greeting do
puts "さようなら"
end

# ターミナル出力結果
# こんにちは
# さようなら

yield
yield(イールド)とは、メソッドに渡されたブロックを実行するための命令です。
yieldを使い場面は、高度な開発をするときに限られているため、 最小限の内容でまとめています。
先程の下記コードをもう一度みてみます。

def greeting
puts "こんにちは"
yield
end

greeting do
puts "さようなら"
end

# ターミナル出力結果
# こんにちは
# さようなら

上記コードでは、常に「さようなら」というテキストが出力されてしまいます。
この「さようなら」の部分を任意のものにするために、textという変数にすることができます。
そのためには、メソッドの定義内でyieldに引数を与える必要があります。

def greeting
puts "こんにちは"
yield("さようなら")
end

greeting do |text|
puts text
end

# ターミナル出力結果
# こんにちは
# さようなら

上記コードは、メソッドの定義内でyieldの引数として「さようなら」という文字列を渡しています。
そして、メソッドの実行側でそれをブロック変数(|text|)として受け取っています。

callメソッド
ブロックをメソッドの引数として、明示的に受け取ることもできます。
メソッドの引数として、ブロックを明示的に受け取る場合には、引数名の前に&をつけます。
受け取ったブロックを実行する場合は、callメソッドを実行します。

def greeting(&block)
puts "こんにちは"
block.call("さようなら")
end

greeting do |text|
 puts text
end

# ターミナル出力結果
# こんにちは
# さようなら

上記コードでは、メソッドの引数としてブロックを明示的に受け取るために、メソッドの定義部分で &blockと書いています。
このように「&引数名」の形でブロックを受け取る引数のことを、ブロック引数と呼びます。
そして、そのブロックを実行するために、callメソッドを実行しています。
callメソッドには、引数を渡すことができます。今回はさようならという文字列をブロックに渡しています。
結果、メソッド呼び出し時に渡しているブロックのブロック変数(|text|)にさようならが代入され、ブロックが実行されています。

【プログラミング学習】Rubyの記法〜繰り返し処理〜

■プログラミング学習 f:id:yuma6128:20211119073209j:plain

while文
Rubyの繰り返し処理としては、eachの他にもwhile(ワイル)文という構文があります。
while文は、指定した条件が真である間、処理を繰り返します。

while 条件式 do
 #条件が真であるときに繰り返す処理
end

※条件式のあとのdoは省略することができます。

例文

number = 0

while number <= 5
puts number
number +=1
end

とすると、ターミナルの出力結果は
0
1
2
3
4
5
となります。これは、number <= 5の値まで出力されています。
無限ループ
繰り返し処理を実装する際に、「無限ループ」を覚えておく必要があります。
無限ループとは処理が永遠に繰り返されることを指します。
無限ループのサンプルとして、2つ例示いたします

例文1

number = 0

while number <= 5
puts number
# 削除する number +=1
end

先程の例文から、number +=1を削除すると、numberの変数の値は、常に0のままなので、 while number <= 10が常に真となり、 無限に0がターミナルに出力されます。

例文2

number = 0

while true
puts number
number +=1
end

こちらは、while文の特性を利用(右の式を判定最終的に真偽値に変換)し、条件式部分にはじめからtrueと書くことによって、 意図的に無限ループを発生させているものです。
無限ループはコンピュータに大きな負荷をかけてしまうため、繰り返し処理を実装する場合は特に注意が必要です。

無限ループから抜け出す方法 break
ある特定の条件になったらループから抜け出すという処理のときにbreakを使います。


number = 0

while number <= 8
 if number == 4
   break
end
puts number
number +=1
end

# ターミナル出力結果
# 0
# 1
# 2
# 3

上記のコードの通り、if文を追加しています。
numberの変数が4にだったとき、breakを実行しています。
実行結果としては、出力結果は3で止まっています。
つまり、number変数の値が、4のときにif文内のbreakが実行され、ループから抜け出していることが確認できます。 if文などの条件分岐とbreakを使うと、特定の条件のときにループを脱出することができます。

【プログラミング学習】Rubyの記法について〜条件分岐〜

■プログラミング学習

f:id:yuma6128:20210818071318j:plain

Rubyの条件分岐の表現方法「case文」
case文とは、条件分岐を表現するための文法です。
if文のelsifを重ねるよりもシンプルにコードを書くことができます。
並列する条件が多数ある場合は、if~elsif~elsif~・・elseと記述するよりも case文を使ったほうがコードとして読みやすくなります。
【case文の構成】

case 対象のオブジェクトや式
when1
 #値1に一致する場合に実行する処理

when2
 #値2に一致する場合に実行する処理

when3
 #値3に一致する場合に実行する処理

else 
 #どれにも一致しない場合に実行する処理


実際のコードで比較すると下記イメージです。
If 文の場合

country = "Japan"

if country == "Japan"
puts "リンゴ"

elsif  country == "America"
puts "Apple"

elsif  country == "France"
puts "Pomme"

elsif  country == "China"
puts "苹果"

elsif  country == "Italy"
puts "Mela"

elsif  country == "Germany"
puts "Apfel"

else
 puts "..."

end

case文の場合

country = "Japan"

case country
when  "Japan"
  puts "リンゴ"
when "America"
  puts "Apple"
when "France"
  puts "Pomme"
when "China"
  puts "苹果"
when "Italy"
  puts "Mela"
when "Germany"
  puts "Apfel"
else
 puts "..."
end

case countryの部分が条件の対象となります。
whenで指定した値とcountryの中身が一致するかで条件を判定しています。
if文と比べてシンプルな見た目になるため、並列する条件が多数ある場合はcase文を使う。

【読書】問題解決のジレンマ―イグノランスマネジメント:無知の力 細谷 功


■読書内容

f:id:yuma6128:20210811073847j:plain

◎感想

新しい学びを得るために意識することは何かというイベントに出たときに、

無知の知を理解して、自分が知らないことを知った上で学ぶ必要がある。
そんな内容がこの本には書かれていると思い、手に取りました。
冒頭のピーター・ドラッカーが亡くなる2年前に「もし書き残したテーマがあるとしたら?」という質問に対して、「無知(イグノランス)のマネジメントに関することだ。しかもそれを書いていたら私の最高傑作になっただろう」と語っていた。と書かれていまして、その言葉もとても魅力的に感じました。
無知というのは、ソクラテスが「無知の知」という概念を唱えたことから、聞き馴染んでいたことだったが、今の社会では、「知らない」ということを認めたり、伝えたりすることは憚られる。
では、無知は悪なのか、というと知識に関しては、インターネットがあるので、どんなに頭の中に記憶をしていたとしても、コンピューターに勝つことはできない。
そう考えると、知識量の勝負や、与えられた課題を解くことはコンピュータに任せ、人間は誰も気づいていない新しい問題を発見し定義することにシフトしていくべきである。
その新しい発見を邪魔するものとして、知識や自分の経験によるバイアスがあり、そういった解釈をリセットすることで、新しい「気付き」を得ることができる。

私は思ったのは、どんなにその業界や同じことをやっていたとしても、結局
自分は無知であると自覚をし、広げた視点を持つことで
新しい気づきを得られるチャンスを掴むことができると感じた。

f:id:yuma6128:20211120104234j:plain