Zenn
Open7

【小ネタ集】ちょっとした便利な技や、忘れそうになる初歩的な技術

tac-tac-gotac-tac-go

ChatGPTなどにMarkdownのコードを出力させる方法

Markdownで出力してください」と記載してもコードを含むようなコードがブラウザ側が勝手にレンダリングされるので、Markdown形式でコピーできるようにうまく出力することができなかったが、原因が分かった。コードを出力する際に「`」(バッククォート) 記号でコードを閉じるのだが、コードを閉じた際にそれで一つの区切りとしてしまっているのでそれ以降の文字がMarkdownからブラウザが勝手にレンダリングされている。

解決策

バッククォート以外でコードを囲むように指定する。

「Markdownで出力してください。ただしコードを囲むときは @を用いてください」

tac-tac-gotac-tac-go

PythonとJavaScriptで文字列の先頭・末尾で文字をマッチさせるときの違い

$1.23 のように先頭に$がついて、末尾は数字で終わる数字を例として考える。
この場合 Pythonでは \A、JavaScriptでは ^ が先頭にマッチする文字を検索、
末尾は Pythonが \Z、JavaScriptが $ になる。

JavaScriptのほうが一般的な書き方で、Pythonの正規表現はこれ以外にも少し他の言語と書き方が異なるので注意が必要。

import re
def to_cents(value):
    return int(m.expand(r'\1\2')) if re.match(r'\A\$(\d+)\.(\d\d)\Z', amount) else None
String.prototype.toCents=function(){
  return /^\$\d+\.\d{2}$/.test(this) ?  parseInt(this.slice(1,).replace(".","")) : null
}

参考リンク - Pythonの正規表現

tac-tac-gotac-tac-go

JavaScriptでSetを使った時にその個数を知りたい時の実装

よくしてしまう実装として Setを一度 Array.from を用いて 配列に変換して length で値を取得するが、Set オブジェクトには prototype として size 関数が実装されている。

そのため、 new Set().size で値が取得できる。

tac-tac-gotac-tac-go

JavaScript で文字を一文字ずつ分割する

str.split("") でも可能ではあるが分割代入をするには スプレッド構文を使うことができる。

[...str].map(s => 以後の処理)

文字列は一種のイテラブルオブジェクトであり、それぞれの文字は個別の要素として扱われるため、文字列を分割することができる。

tac-tac-gotac-tac-go

Pythonでdatetimeオブジェクトから値を取り出す指定方法

Format Symbol Description Example
%Y 西暦(4桁表記。0埋め) 2025
%m 月(2桁表記。0埋め) 02
%d 日(2桁表記。0埋め) 11
%H 時(24時間制。2桁表記。0埋め) 12
%M 分(2桁表記。0埋め) 21
%S 秒(2桁表記。0埋め) 12
%y 西暦の下2桁(0埋め) 32
%l AM/PMを表す文字列 AM
%x 日付をMM/DD/YY形式にしたもの 02/11/25
%X 時刻をhh:mm:ss形式にしたもの 12:11:21
%a 曜日の短縮形 Mon
%A 曜日 Thursday
%z 現在のタイムゾーンとUTC(協定世界時)とのオフセット +0900
%Z 現在のタイムゾーン JST

筆者は今まで時間・分・秒のデータを取り出すのに、strftime("%H:%M:%S") と記述していたが、strftime("%X") で取り出し可能。また、MM/DD/YY 形式ではあるもの strftime("%x") で日時は一気に文字列に変換できるので、分割代入を使えば一度に月・日・年が取得できる。

m,d,y = time.strftime("%x").split("/")
print(m,d,y)
tac-tac-gotac-tac-go

FlutterでMacOSでアプリを起動するときにネットワーク処理をおこなうとき

Image.networkDio などで画像を表示したりAPIでデータを表示したりするときなどの処理をおこなうとき、MacOSのデスクトップアプリで起動する際にはセキュリティの許可をファイルに記述する必要がある。

macos/Runner/DebugProfile.entitlements のファイルに以下を追記する。

<key>com.apple.security.network.client</key>
<true/>
tac-tac-gotac-tac-go

JavaScriptでDateを扱うときの注意点

実装例として今日の日付と誕生日の年、月、日を引数とした値で何日差があるか。生後何日かを調べる実装を紹介する。

function ageInDays(year, month, day){
  const now = new Date();
  const birth = new Date(year,month-1,day)
  return `You are ${Math.floor((now-birth)/(24*60*60*1000))} days old`
}

注意点として、new Date(year,month-1,day) 、monthは0indexから始まるので指定の月を入力したい場合は、-1をして考える必要がある。

作成者以外のコメントは許可されていません