JavaScript で変数を文字列に埋め込む方法

普段 Python を使っているのだが、Pythonでいうところの f'foo{bar}' のように変数を文字列を埋め込む表記方法が JavaScript にもあるか? と疑問に思ったので調べてみた。

参考:【JavaScript】文字列に変数を埋め込む|Into the Program

知りたい点を抜粋すると、

なるほどねー。

利用端末が限定されている状況ならテンプレートリテラルを使っても問題ないが、
多様な端末で利用される可能性があるなら、始めから従来の + を使った「結合」方法を用いるのが無難ということのようだ。

ちなみに、テンプレートリテラルがどういうものかの一例をあげると、

var msg = 'World';
console.log(`Hello ${msg}!`);

で、Hello World! が出力される。ポイントは

  1. ` で囲う。
  2. 変数部を ${} で囲う。

なのだが、これはテンプレートリテラルと呼ばれる仕様の一部で、\n と表記しなくても改行が反映されたり、タグ付きテンプレートというより高度な文字列を返す組み合わせを用意できたりするものらしい。

らしい、というのはドキュメントにはそう記載があるが、私自身は JavaScript を実務で使用してるわけではないので、肝心の使い所がよくわからず説明できないという意。

ちなみに、テンプレートリテラル中の変数部のことをプレースホルダーと呼ぶらしいが、プレースホルダーと変数の違いは、変数は変数で、テンプレートリテラル等で変数の中身を展開(置換)することのできる部分のことをプレースホルダーと呼ぶらしい*2

と、こんな感じでテンプレートリテラルは、Python で使ってる文字列埋め込み表記(正確には フォーマット済み文字列リテラル と呼ぶ*3)に表現がすごく近いものだった!

ので、私が求めていたものではあったのだが...
前述の通り、特に IE での互換性がないので、大人しくJavaScriptの変数を含む文字列は + で結合するようにしようと思う (苦笑

Docker使った時にFlaskが動かない

ローカルで作成した次のコードは正常に動いて、ブラウザを開くと Hello World! と表示されるのに、同様のコードをDocker経由した途端、動かなくなった。

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run(port=80, debug=True)

動かないって表現は正確じゃなくて、正しくは localhost に接続しても このページは動作していません ってブラウザに怒られる状態に。

最初はDockerのポート指定間違えているのかな? と思ったが、調べてみたら次の記事に直面。

Flaskのサーバーはデフォルトだと公開されてない - Qiita

host='0.0.0.0' の指定が大事。
これがなければ、外部からアクセスすることができない。

引用元のリンクはドキュメントのバージョンが変わっていて切れていたので貼り直すと以下: Quickstart — Flask Documentation (2.0.x)

Externally Visible Server If you run the server you will notice that the server is only accessible from your own computer, not from any other in the network. This is the default because in debugging mode a user of the application can execute arbitrary Python code on your computer.

If you have the debugger disabled or trust the users on your network, you can make the server publicly available simply by adding --host=0.0.0.0 to the command line:

Oh...。Flaskサーバはデフォルトだと非公開設定なんですネ。
これなんて Flask初心者に対する初見殺し?(ちゃんと公式ドキュメント読んでない奴が悪(ry

そんなわけでコードを以下のように修正。

if __name__ == '__main__':
# before
#     app.run(port=80, debug=True)

# after
    app.run(host="0.0.0.0", port=80, debug=True)

ちゃんとDocker上でもFlaskが動くのを確認。おっけー。

Docker のポート指定間違えてるパターンもあるあるなので、Python側直しても動かない時はそちらも確認してみてくださいね。

ではでは〜ノシ

「医学統計の基礎のキソ」で基礎固め

「医学統計の基礎のキソ」を 1 〜 3巻まで読了したぞー!

https://www.amazon.co.jp/dp/4904307240

読んでみての感想は、「もっと早くに読んでおけば良かった...」だった。。。
そりゃ、そうか。何も小難しいことを覚えようって話ではなく、基礎的な内容を理解しようって趣旨なんだから。

業務でデータ分析やってるので、当然知っていることばかりなのだが、
業務を通して曖昧に覚えていた部分を医学統計という枠組みできっちり体系立って理解することができた。

単純な統計の話も多いのだが、その統計を医学分野で使うには〜って所に重きをおいて具体例多めで説明してくれてたのが、使い所のイメージがわかりやすくて良かった。

医療系分野でデータ分析業務に携わるなら、基礎として必読書なんじゃなかろうか。
特に、医学系以外の分野のデータ分析をやってきて、初めて医学系業務に関わる人は絶対に一読しておくべき。

今なら新人が入ってきた時に「まずこれ読んで」って言える。
これ読んでもし分かってない部分があったら、それ君の理解が浅い部分だから重点的に読んどいて、と。

要点を押さえる、って意味では学生向きな側面もあるんだろうか?
医学論文読む学生さんは3巻にどんな論文を読むのが良いかが書かれているから、オススメかも。

また、データサイエンスに直接には関わりのない、営業や企画など上位レイヤーの仕事を担当する人も、是非一度読んでおくのをオススメしたい。本書で扱ってる内容は基礎としてわかってないと、後から「あれが足りない、これを考慮してなかった」と、何度も出戻りする羽目になる......かもしれない。

いや、社内に詳しい人が既にいて、その人に任せておけばオールオッケーな職場ならそれで構わないのだけれど、『周りに詳しい人がいなくて基礎すらまともに聞けないんだけど〜』とか『ちょっと今更人に聞きづらいからコッソリ勉強しときたい〜』みたいな環境では非常に重宝するのではなかろうか。

以上!

明けましておめでとうございます

あけましておめでとうございます!

昨年末から始めたばかりの本ブログ、今年から本格的に運用していければと思ってます。

今日も「やべー、書くことまとまってない!」と思いながらも、
「まずはブログを書いて投稿する習慣をつけるべきだよなー」と思い、
短いし内容薄っぺらいながらも、こうやって記事書いてる次第です。

何とか週1で更新、少なくとも月1で、ひとつ以上まとまったテーマの記事が出せればと画策中です。

当面、アクセス数とか記事の品質とか、そういうのは二の次なんだ。
もちろん、将来的には大事にしていきたいと考えている要素なのだけれど、
まずは自分の考え・知識の情報発信を習慣化することが第一なんだ。

そうやって自分を良い方に変えていくことを大事にしたいんだ。

...頑張ろう。

そんなわけで、本年もどうぞよろしくお願い致します。

ブログ開設

そろそろ2021年も終わろうかという12月30日。

来年に向けて何か変えていこう、と思い立ち、ブログを始めることにした。

 

というわけで、まだまだ拙い文章ながら「初めまして!」の記事を書いてみる。

 

本ブログは、自分の知識の体系化と、情報発信を主目的とする。

 

...ことは決めたのだが、具体的に何を書いていくかはこれから次第になりそう。

私の得意領域を勘案するに、ざっくりと予定している記事の暫定方針は大きく3つ。

 

うーむ、全部混ぜるとカオスなブログになりそう。

まぁ、個人ブログだし、気にしたら負けか。

 

どのくらい正確で、どのくらい役に立つ記事が書けるかは分からないのだけれど。

 

私の書く備忘録のような、呟きの延長みたいな記事が「いつかどこかの誰かのささやかな役に立つことを願って」、来年ちょっと頑張って記事投稿したいと思う。

目指せ、細々とでもまず一年の継続!

 

そんなわけで、これからよろしくお願い致します。