2019年11月20日水曜日

個人事業主の税金対策

個人事業主になってもうすぐ6年。
いまさらながらだけど、税金についてお勉強してみた。

控除を増やしたい

  1. 基礎控除 (所得税: 38万円、住民税: 33万円)
  2. 青色申告控除 65万円
上記に加え、社会保険や生命保険、扶養控除などがある。
昨年の私の控除合計額は 89万程度しかない。

どれだけ控除が増やせるか??


付加年金

付加年金は、国民年金に追加できる任意加入の制度。

  • 月々の掛金は 400円
  • 掛金は「社会保険料控除」
  • 老齢基礎年金が 200円 × 付加保険料納付月数 プラス
  • 国民年金基金と同時加入はできない

定額のため、物価スライド無いけど、終身年金。
2年で元がとれる。長生きするほどお得。

さっそく区役所にいって、手続きしてきた。


小規模企業共済

小規模企業共済は、小規模経営者が事業をやめたときに解約できる退職金代わりの共済。
  • 月々の掛金は1,000~70,000円まで(500円単位)
  • 加入後も増額・減額可能
  • 掛金は「小規模企業共済等掛金控除」
  • 一括受取りの場合は退職所得扱い、分割受取りの場合は、公的年金等の雑所得扱い
  • 貸付制度あり
受取りのときまで、税負担を引き伸ばしできる。
MAXの掛金で、84万円 / 年。
受取りも、退職所得 になるのでオトク。

給付金額は、解約理由により異なる
納付期間が6ヶ月未満は給付なし。3年以上、加入しておきたい。
3年の内に急激なインフレが起こったらツライけど、日本だったら大丈夫かな。



前納払いが可能。
現金であれば12月に前納(一括)で支払いで、今年の控除に間に合うらしい。

フリーランス状態も落ち着いて、もう会社員に戻る気がない私としては、よい制度かも。
とりあえず、資料請求をポチっと。



個人型確定拠出年金(iDeco

毎月積み立てして金融商品を運用し、60歳以降に年金または一時金で受け取りするもの。
(60歳になるまで引き出すことはできない。)
  • 月々の掛金は5,000円~68,000円まで(上限は国民年金基金や付加保険料の合計)
  • 掛金の変更は、年に1回だけ可能
  • 掛金は「小規模企業共済等掛金控除」
  • 運用で得た定期預金利息や投資信託運用益は非課税
  • 一括受取りの場合は退職所得扱い、分割受取りの場合は、公的年金等の雑所得扱い
  • 貸付制度なし
  • 受給開始は10年以上加入で満60歳から
付加保険400円と併用する場合は、67,000円/月、 804,000円/年 がMAXになる。
小規模企業共済と併用すると、 164万4千円 / 年 が共済掛金控除にできる。

途中解約できないし貸付もないので、収入が安定していないタイミングでは厳しいカモ。

口座開設・維持費が必要

最低でもiDeCoに加入する時に2,829円を、運用期間中は月額171円が必要。その他、運用会社によっては手数料がプラス。
信託報酬は、0.1~2%くらい。

投資信託の知識が必要

金融商品は、投資信託と定期預金があり、運用会社によって利用可能な商品が変わる。
通常の投資信託の商品よりも、信託報酬が少ない長期向きのものが用意されている感じだけども、自分のリスク許容量を考えて商品の割合を考える必要がある。
元本割れしない定期預金もあるけど、手数料が必要なので、リスク取りたくない人は小規模企業共済の方が良い。

私の選択

SBI証券のセレクトプラン を資料請求してみた。
あんまり詳しく無いので、信託報酬が少ないインデックスのもので放置にしたい。
eMAXIS Slim 先進国株式インデックス  信託報酬: 0.10989%以内

とかどうかな。
申し込みには時間がかかるみたいなので、来年からかな。


所得 2,400万の壁


令和2年度分(2020年1月1日~12月31年)から基礎控除額が10万円プラスされる
  • 所得税 基礎控除 38万円 → 48万円
  • 住民税 基礎控除 33万円 → 43万円
ただし、合計所得が2,400万円を超えると、段階的に控除額が少なくなり、2,500万円以上になると控除額は0円になる。

なので、2,400万円の壁 がある。
いまんとこ、超える可能性は全然ないけど、意識するぐらいになりたい。


メモ

退職金控除

課税対象となる退職金は、
(収入金額 − 退職所得控除額)× 1/2


勤続年数(=A)退職所得控除額
20年以下40万円 × A
(80万円に満たない場合には、80万円)
20年超800万円+70万円 × (A-20年)


注意: 勤続年数が20年前後の場合

20年で計算方法が変わる・ 端数の月は繰り上げ される。
240ヶ月 (= 20年) の場合は、40 × 20 = 800万円
241ヶ月 (= 21年) の場合は、800 + 70 × (21 - 20) = 870万円
1ヶ月違うだけで70万変わる

注意: 複数の退職金がある場合

同じ年に退職所得が2つ以上ある場合は、退職所得控除の勤続年数は、どちらか長い方の年数が適用される。
共済とIDecoを同じ年に一括受取すると、損 or 得 両方のパターンがある。

退職金と個人型確定拠出年金を「同じ年に受け取る」のは要注意!
退職所得と退職所得控除額



社会保険料控除と小規模企業共済等掛金控除の差


社会保険料控除は同一生計の親族分も申告者の控除対象に出来る一方で、小規模企業共済控除は掛金納付者本人の所得控除項目としてしか申告できない。
なので、専業主婦の人の場合は社会保険料控除でないと意味がない。

• • •

2019年11月4日月曜日

RecipeNote アプリをリリースしました

レシピ記録アプリ RecipeNote をリリースしました。
iOS13以上、無料アプリです。(アプリ内課金で広告が消せます)
ぜひ使ってみてくださいませ!
あ、Flaskじゃなくて、個人で出したアプリになります。



アプリでできること


  • レシピの登録
  • 買い物リストの表示
  • 食材のマーク付け
  • 栄養成分の表示

このアプリを作った一番の理由は「買い物リスト」。
必然的に、一番大切にしている機能も買い物リストになっています。


買い物リストで欲しかった機能

もう既にレシピサイトはいっぱいあるのでレシピ登録アプリは必要ないかなって思っていました。サイトをまたがってお気に入りのレシピのURLをまとめる機能や、分量をカスタマイズ...forkしたいとかはありますけど。

だが! 材料を買おうとするときが面倒で。
必要な材料のメモを取ること自体も、もちろん面倒なのですが...、
順番がバラバラなメモだと、スーパーで行ったり来たりすることになったりする。
目的の材料が売り切れだったり、他のものが安かったりすると作るものを変えたくなる。
...あるあるですよね?

で、実装した機能が以下。

  • 買い物リストの順番が、スーパーで並んでいる食材順に並んでほしい
  • 食材の数は、複数のレシピの合計数を表示してほしい
  • 買い物中に、作るレシピを変更して必要な食材を抽出しなおしたい



食材のマーク付け

いざ料理を始めようとしたら、醤油とか、みりんとか、もう残りなかった!
...ってことも、あるあるですよね?

その対策として、食材ごとに ! や ♡ 、① などのマークを付ける機能を入れました。
缶詰などのストック食材や、調味料の残量の目安にするために使えます。

今回使用しないものでも、安売りしていたら買おう という、ゆるい買い物メモと考えてもらえればです。




材料の分量の入力

これが最後まで悩んだトコロ..!
汎用性を考えるなら、文字でのフリー入力が一番なんだけど、買い物リストには合計した値を表示したいので可能な限り数字として扱いたい。
数字の扱いにしたいけど、1/2, 1/3 という表示ができるようにしたい。

あれこれ考えてたけど最終的には、ドラムから選択したものは計算対象に。無いものはフリー入力で計算対象外にするようにしました。
わかりやすく、使いやすいUIが...思いつきませんでしたよっ (;_;)


あまりクールではないけども、食材名・分量ともに選択で選べるようになっているので、手書きで買い物メモを作るよりは、このアプリを使うほうが早いはず!


栄養成分の表示

このアプリでは、レシピごと、ブックマークしたレシピの合計 で栄養成分が表示できます。
表示されると、それなりに意識するようになるので、ちょっとうれしい機能。
ですが、実は、せっかくなら付けてみようか。という軽い気持ちでいれたもの。
軽い気持ちでしたが、実現させるために少し複雑になってしまいました。

仕組み的にはこんな感じ

  1. 食材の設定で、可食部100gあたりの栄養成分を登録(日本食品標準成分表から参照可能)
  2. 単位がgでないときはgに変換するためのパラメータ(密度)も登録
  3. レシピの表示時には「廃棄率」を考慮したグラム数に変換して栄養成分を表示

例えば、「かぼちゃ 1/4個」 の場合、
食材に 1個 = 1,200g、廃棄率 = 10% と登録されているので、
1,200 * 1/4 * 0.9 = 270g 分の栄養成分の表示になります。

例えば、「醤油 大さじ1」 の場合、
食材に 1ml = 1.15g、廃棄率 = 0% と登録されているので、
1.15 * 15 = 17.25g 分の栄養成分の表示になります。
※大さじ1: 15ml

よく使われそうな食材(約180個)は、デフォルト登録しているのですが、より正確な値にしたい場合は、実際に自分が使用しているものに合わせて修正してもらえたらデス。


まとめ

ということで、
買い物メモを書く代わりとして、ゆるく使ってもらうのもOK。
栄養成分をがっつり計算するために使ってもらうのもOK。
RecipeNote をぜひ使ってみてね!


P.S.
リリースして2日ほど経ったのだけど、App Storeの検索でまだ出てこない。
いつ反映されるのだろう....

• • •

2019年9月15日日曜日

iOS 13, Are you ready?

Flask のアプリ、7本をiOS 13 / watchOS 6 対応をして準備完了しました!
Zones, FitPort, Standland, Cube, Timesheet, Timelet, Coyomi

OS正式リリースの前日、9月18日にリリース予定です。お楽しみに!

対応、いやー大変でした。
なにが大変だったかというと、なんかもう、いろいろ?


Localize Bug

いくつかあったのですが、最後まで様子見していたのが、テーブルセルのローカライズがされない問題。
以下の場合に発生します。
  • Storyboardの.strings ファイルを使ってローカライズしている
  • TableViewCellのStyleにBasicやRight Detailなどを利用している
結局最後のGMまでFixはされなかった。
遭遇する人は多いと思ったのだが、Feedback AssistantでReportした内容をみると、

Recent Similar Reports: Less than 10
...って、10以下って少なくね!?


Page Sheet

XCode 11でビルドして最初に気づくのが、ModalのデフォルトがPage Sheetになっていること。
iOS 12時代の形式に戻すには、Full Screen系に選択しなおしすればOK。
だけど、せっかくならPage Sheet使ってみたいなー と気軽に入れ始めたら、あれこれ引っ掛った。
  • Modalの画面からさらにModalを出していた場合の対処
  • 編集画面の場合は、変更有無をチェックして Swipe to Dismiss できない処理を追加
  • 元画面が見えている扱いなので、viewWillAppear 系の呼ばれ形が変わる。たとえば、viewWillAppearで変更内容を一括して再更新している画面(手抜き処理)が元画面の場合、小画面で変更した内容が反映されない など
  • 元画面がSceneKitの場合は、Renderingでの処理を止めてからNodeを操作するなどの考慮が必要
Page Sheetをデフォにするのは思い切ったなー と思うが、おかげで、Swipe to Dismiss する操作がみんな慣れているものになるのも早いと思う。

「Closeボタンを上に置くと操作しにくいから、下に置くか?」という迷いももう解決っす。
あ、でも、Closeボタンはちゃんとあったほうが良いです。Voice Over/Voice Control のために。

Page Sheetと同じ動きだけど、もっと高さが小さいバージョンのものが欲しくなったので作成したりした。こういうやつ。

標準でできるといいのになぁ。


Dark Mode

前回のブログで対応方法を書いた

実際に移行するときの手順は、以下のような感じになると思う。

  1. Storyboard、コードで描いている色を整理
  2. System Colors, Dynamic System Colors に置き換え可能なものを検討する
  3. 整理したものをAsset の Color Setに定義
  4. 利用画像もLight/Dark用を用意 or TintColorで切替にする
  5. Storyboard、コードの色設定をColor Setのものに変更する
  6. cgColor を使っている所は、traitCollectionDidChange や tintColorDidChange などで変更に対応する

できるだけSystem Colorsを使っていきたい所だけど、限られた中から選ぶの結構迷います。
そしてアプリ独自の色もLight/Darkで色を調整したくなってくるという...。

UILabelなどUIKitのコンポーネントに設定したDynamic Colorは、Light/Darkのモード切替時に自動的に反映してくれるけど、CGLayerなどで利用したCGColorは自前で更新する必要があります。

StoryboardのGlobal Tint Colorに、独自に作成したCustom Color Setを指定した場合、その色が他要素に使われていないとXCode再起動などで色設定が消えてしまうバグ?があります。

前からある現象だけど、StoryboardでCustom Color Setを設定している箇所にコードから色を設定しても反映されない(viewDidLoad以降にStoryboardの設定で上書きされてしまう?)ことがあります。


Voice Control, Voice Over

Voice Control がiOS 13で追加になります!

Voice Overよりも、Controlの方が対応が簡単と思うし、使いたい人も多いと思うので、Accessibilityの第一段階として取り組むのはいいと思った。

Voice Overの場合は、読ませる順番、読ませる内容、スクロールの移動、ローター使った見出し移動 など注意すべき箇所は多いのですが、Voice Control の場合は、操作できるところを明確にするだけでも助かるはず。("Show Numbers" で番号を表示して使う)
さらに、名前も整理しておくと、 "Tap [名前]" のように直接操作できるようになる。(何回も操作が必要なStepperなどでは名前がないと操作がツライ。)


Accessibility系をやりながら思ったこととしては、
まとめて読ませる括りのものは1つのViewにいれて、専用のクラスを設定するようにしておくと、やりやすいです。
accessibility***系メソッド をoverrideして書けるので。

//MARK:- Accessibility
override var accessibilityLabel: String? {
get {
return activityTypeLabel.accessibilityLabel
}
set { }
}
override var accessibilityValue: String? {
get {
var params:[String] = []
if !locationLabel.isHidden, let value = locationLabel.accessibilityLabel { params.append(value) }
if let value = dateLabel?.accessibilityLabel { params.append(value) }
if let value = timeLabel?.accessibilityLabel { params.append(value) }
if let value = sourceLabel?.accessibilityLabel { params.append(value) }
return params.joined(separator: ", ")
}
set { }
}

他にも色々学んだことは多いのだけど、書くとめっちゃ長くなりそうなのでまた機会があれば。

• • •

2019年6月29日土曜日

iOS13: Dark Modeの対応方法

アプリのiOS 13対応 で、必ず通るのが Dark Mode対応。
なぜなら、Opt-out だから。

まだ iOS 13 beta2 なので、今後変わるかもしれないけど、今の知見を書いてみる。

Dark Mode にしない設定

XCode 11でビルドしたアプリを、iOS 13でみるとDark Mode対応になる。
XCode 10以下でビルドしたものは、Dark Modeにはならない。(Light Mode)

アプリ全体でModeを固定にしたい場合は、plistのUIUserInterfaceStyleで指定可能。
特定の画面でModeを固定にしたい場合は、overrideUserInterfaceStyle で指定可能。


Modeごとの色

System Color

Light / Dark でよきに変わるシステムカラーが利用できる。
Human Interface Guidelines: System Color

ラベル文字色、背景色などごとに、Primary, Secondary, Tertiary の色が用意されているので重要度に合わせて使う。
UI Element Colors

Dark ModeのときのsystemBackgroundは基本的にはUIColor.black だが、Page SheetなどのModalのときは、少し薄い黒になることに注意。

System ColorはiOS 13以上で利用可能なため、コード上で設定するにはiOS 13 以上である必要がある。
if #available(iOS 13.0, *)  {
    titleLabel.textColor = UIColor.label
}
ただ、StoryboardにてSystem Colorを設定した場合は、iOS 12でも利用可能。

Backwards compatibility for iOS 13 system colors は下位互換のための情報の良記事。

Custom Color

独自の色は、Asset CatalogでColors Set を指定して利用する。
コードから利用したいときには、UIColor(named: "colorName")  で。


Mode切替のタイミングの判定

Light / Dark は、システムによって動的に変わる場合がある。
(Settings > Display & Brightness に Automatic の切替アリ)

UIViewやUILabelなどは自動的に切り替わるので特に考慮は必要ないが、cocoa 2D などでコードで色を指定しつつ描画しているところなどは、切替のタイミングを判定して描画し直す必要がある。

切替のタイミングは、traitCollectionDidChange

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    let userInterfaceStyle = traitCollection.userInterfaceStyle
}

UIUserInterfaceStyle のEnumに、unspecified, light, dark が定義されている。

traitCollectionDidChangeはデバイスの回転などでも呼び出されることに注意。
Mode切替の場合のみ処理したい場合には、hasDifferentColorAppearance を使って判定できる。

let hasChanged = previousTraitCollection.hasDifferentColorAppearance(comparedTo: traitCollection)

Color Setの色から、現在のModeの色を取得するには、resolvedColor(with:) を使う。
let color = UIColor(named: "MyColor")?.resolvedColor(with: traitCollection)


• • •

2019年5月10日金曜日

iOSの令和元年が始まる

iOS12.3で「令和」が対応されるみたい。
(現時点で、iOS12.3はbeta 5)

これ関連で、バグを仕込んでしまっていたようで、今日は修正をしていた。

たとえば、
平成の日付: 2019-04-09 17:04:38 +0000 から、その日の0:00を求めようとしたとき。

let date1:Date = Date().addingTimeInterval(-3600 * 24 * 30) //平成の適当な日時
print("date1:", date1)

let cal = Calendar.current
let comp = cal.dateComponents([.year, .month, .day], from: date1)
let date2 = cal.date(from: comp)
print("date2:", date2 ?? "nil")

の結果は、

date1: 2019-04-09 17:04:38 +0000
date2: 2049-04-09 15:00:00 +0000

...と、30年先の日時になってしまう。
もちろん、iPhoneのカレンダーが西暦の場合は大丈夫。和暦設定にしている時のみ。


DateComponentを使った日時の計算には、Calendar(identifier: .gregorian) を使いましょう...


P.S.
0:00 の日時の算出には、CalendarのstartOfDay が使えます。
• • •

2019年2月25日月曜日

XCodeでアプリアップロード中に“negotiating connection…”になる

XCode10 でアプリをアップロード中に、“negotiating connection…” で止まってしまう。

Stack Overflowでも同じ現象になっている人がいる。
Xcode 10 app upload stuck on “negotiating connection…”

Application Loaderを使えばうまくいく。
Application Loader/Xcode Stuck on 'Verifying Assets with the App Store"

でも、Loaderを使うのは面倒だし、XCodeでやりたい。
原因も気になる...

Loaderを使う回避策にあるように、どうやら原因はネットワークにあるみたい。
自宅のネットワーク使うとダメだけど、iPhoneのテザリングでやってみると成功した。

自宅のネットワークの設定をナニカいじるといいのかなぁ。
詳しい人教えてほしい...

• • •

2019年2月11日月曜日

iOS11のColorSet

iOS11からAsset CatalogにColor Setを指定できるようになりました。

この設定をすると、Storyboardとコードの両方で利用できるのでとても便利。

Storyboard上では以下のように選択肢が現れます。

コード上では UIColor(named:"ColorName") で使えます。

だが! 問題点が。

StoryboardでColor Setの色をしていると、viewDidLoad() よりも後にその設定が反映されるみたい。(iOS12で確認)
つまり、viewDidLoad() でコードから色の再設定していてもそれが反映されない。
traitCollectionDidChange で設定してもダメなので、結構遅いタイミングの様子。

なので、コードで色を再設定する箇所には、StoryboardでColor Setは使わない としたほうが良さげ。
iOSのバグなのかな?と思うので、今後修正されるかもしれないが、お気をつけくださいー。


• • •

2019年1月23日水曜日

Hops - 木霊の旅 リリースしました!


Hops -木霊の旅 をリリースしました!
日々を活動的に過ごすと、いろいろなエリアに行けたり、着せ替えができるようになります。

Standland では、スタンド数 のみが対象でしたが、Hopsでは、歩数、階段数、カロリー など対象が増えています。
Standlandでスタンドが習慣化できたら、次はHopsで動くことを習慣にしていこう! という目的のアプリです。

ランニングしたり、ジムに行ったりしなくても、エスカレータじゃなく階段を使ったり、ひと駅あるいてみたり と、普段の生活でちょっと動くことを意識するだけで随分違う。

私の経験談では、ダイエットしなきゃ!と頑張って運動して毎日体重測るけど、思ったより体重減らない...とイライラしたことがあるが、動くことを意識してゆるく生活したたら、いつのまにか体重減ってた ってことが結構ある。

運動しなくちゃいけないんだけど、忙しくてジムにもいけないわーー という人、ぜひお使いくださいませ!



内部のお話

Standlandと同じく、SceneKit で3Dモデルが動いていますが、Standlandでは入れれなかった機能がいろいろ入っています。


DOF

DOF(被写界深度)が生きていて背景がぼやけて素敵になっています。
これは重い処理なのですが、入れれるように頑張りました( @horiuni さんが )
なので、全てののエリアを是非見て欲しいー!


キャラを動かせる

キャラを自分で動かせます。
最初は歩くのが遅くてちょっとイラっとするかもしれないのですが、SPEED値を上げていくと早くなるので、ぜひ上げてみてください。
歩くアニメーションですが...

SPEED 0 (遅い)の時 はのっしのっし歩きます。


SPEEDが早くなっていくにつれ、前傾姿勢でバタバタ走ります。


この実装には、遅い用、早い用のアニメーションを2つだけ用意し、iOS11 で追加された SCNAnimationPlayer のblendFactorとspeedの値を調整してしています。

歩く音も入れているのですが、これもAnimationPlayerのおかげでとても簡単。
SCNAnimationのanimationEventsに音を鳴らす処理をいれておけば、Playerのspeed値に合わせてEventの発生タイミングも変わってくれるから。
あー、AnimationPlayer ラブ❤


他には、カメラをいくつか用意して切り替えしてみたり、カメラの Color Grading いれてみたり。
SceneKitってiOS11で随分変わったので、Standlandでは入れれなかった事が結構あったのですw


...ということで、ぜひ Hops をお試しください!
そして、なにがバグがありましたら、Feedbackのメールを頂けるととても助かります m(_ _)m







• • •